WhiteBoard::WhiteBoard(QWidget *parent) : QWidget(parent), ui(new Ui::WhiteBoard) { ui->setupUi(this); setMouseTracking(true); currentPathIndex = -1; } vo...-QT开发中文网" />

QT开发中文网

#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; } vo...

在你提供的代码中,撤销一步后再画一笔会导致之前撤销的路径重新显示出来。这是因为在mousePressEvent中,每次鼠标左键按下时都会创建一个新的路径并添加到路径容器中。当执行撤销操作后,当前路径索引减小,但新创建的路径仍然存在于容器中。

要解决这个问题,可以在执行撤销操作时删除当前路径及其之后的所有路径。修改undo()函数如下:

void WhiteBoard::undo()
{
    if (currentPathIndex >= 0) {
        paths.remove(currentPathIndex, paths.size() - currentPathIndex); // 移除当前路径及其之后的所有路径
        --currentPathIndex;
        update();
    }
}

通过调用remove()函数来删除指定范围内的元素,从当前路径索引位置开始删除到最后一个路径。这样就确保了撤销后重新绘制不包含已经撤销的路径。

希望能帮助到你!如果还有其他问题,请随时提问。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?