在你提供的代码中,撤销一步后再画一笔会导致之前撤销的路径重新显示出来。这是因为在mousePressEvent
中,每次鼠标左键按下时都会创建一个新的路径并添加到路径容器中。当执行撤销操作后,当前路径索引减小,但新创建的路径仍然存在于容器中。
要解决这个问题,可以在执行撤销操作时删除当前路径及其之后的所有路径。修改undo()
函数如下:
void WhiteBoard::undo()
{
if (currentPathIndex >= 0) {
paths.remove(currentPathIndex, paths.size() - currentPathIndex); // 移除当前路径及其之后的所有路径
--currentPathIndex;
update();
}
}
通过调用remove()
函数来删除指定范围内的元素,从当前路径索引位置开始删除到最后一个路径。这样就确保了撤销后重新绘制不包含已经撤销的路径。
希望能帮助到你!如果还有其他问题,请随时提问。
内容由零声教学AI助手提供,问题来源于学员提问