Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在使用 Qt 的撤消/重做框架。我将撤消命令推送到撤消堆栈。但是,在命令的重做中调用的函数有时什么都不做,因为某些要求没有得到满足。在这种情况下,如何让undo栈回到命令推送前的状态呢?
我刚刚阅读了源代码QUndoStack::push()。它在第一次开始时调用重做。redo()如果是这样,我想我只需要在没有真正做任何事情的情况下在函数中抛出异常。这应该工作吗?
QUndoStack::push()
redo()
我不认为你能做到这一点。当您将撤消命令推送到堆栈时,您这样做是因为您正在对文档或数据模型进行实际更改。一旦命令被推送,堆栈就会调用它的redo()方法。因此,在将命令推送到堆栈之前,您应该真正检查是否满足要求。不要推送任何实际上不会进行任何更改的命令。