WhiteBoard::WhiteBoard(QWidget *parent) : QWidget(parent), ui(new Ui::WhiteBoard) { ui->setupUi(this); setMouseTracking(true); currentPathIndex = -1; } voi...-Go服务器开发" />

ZBLOG

#include "whiteboard.h" #include "ui_whiteboard.h" #include WhiteBoard::WhiteBoard(QWidget *parent) : QWidget(parent), ui(new Ui::WhiteBoard) { ui->setupUi(this); setMouseTracking(true); currentPathIndex = -1; } voi...

在你提供的代码中,问题出现在mousePressEvent()函数和mouseMoveEvent()函数中对path对象的处理上。

在每次鼠标左键按下时,你会创建一个新的路径(path.moveTo(event->pos())),然后将该路径添加到历史记录中。而在鼠标移动事件中,你会将当前路径连接到鼠标移动的位置上(path.lineTo(event->pos()))。

这就导致了当你释放鼠标左键并再次按下时,新创建的路径不包含之前已经绘制的线条部分。因此,当你移动鼠标时只能看到新路径与旧路径之间的连接线。

要解决这个问题,你需要修改如下:

  1. QPainterPath path; 移动到类的私有成员变量中,并将其初始化代码移到构造函数里面。
class WhiteBoard : public QWidget
{
    Q_OBJECT

public:
    explicit WhiteBoard(QWidget *parent = nullptr);
    // ...

private:
    Ui::WhiteBoard *ui;
    QPainterPath path; // 移动到类的私有成员变量

    // ...
};
  1. 修改 mousePressEvent() 函数,在每次鼠标左键按下时,重新创建一个空白的路径。
void WhiteBoard::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        path = QPainterPath(); // 创建一个新的空白路径
        path.moveTo(event->pos());
        paths.erase(paths.begin() + currentPathIndex + 1, paths.end()); // 清除当前路径之后的历史记录
        ++currentPathIndex;
        paths.append(path); // 将当前路径添加到历史记录中
        update();
    }
}
  1. 修改 mouseMoveEvent() 函数,在鼠标左键按下并移动时,连接当前路径。
void WhiteBoard::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton)
    {
        path.lineTo(event->pos());
        update();
    }
}

通过以上修改,应该能够正常绘制线条,并保留已绘制的线条。请尝试运行代码并测试效果。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处: WhiteBoard::WhiteBoard(QWidget *parent) : QWidget(parent), ui(new Ui::WhiteBoard) { ui->setupUi(this); setMouseTracking(true); currentPathIndex = -1; } voi...">https://golang.0voice.com/?id=18049

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?