我们常常有这样的业务场景,需要支持撤回的动作(即 undo
)。如果让你来设计,聪明的你肯定也能立即想到解决问题的办法,对,将操作的 command { 对象,指令,属性 }
保存到一个容器中。
command
,动作执行即指令入栈, 动作撤销即指令出栈。入栈 对应的也就是对象的创建和渲染;出栈即对象属性回溯与旧状态渲染,可能也包含着对象的销毁和内存释放的过程。list
会比较实用。不过,多步骤的撤销,设计的业务逻辑也会更加复杂一些。在此科普篇中,不进行赘述。那么,我们懂了基本的实现原理,是时候该自己出手手撸一套了么?还不是时候,本系列我们先从学习的角度,全面的了解Qt的Undo Framework
,学会使用,然后再从源码出发,剖析内部实现。最后,就可以自己上手了。
Qt's Undo Framework
QUndoCommand
、 QUndoStack
、QUndoGroup
、QUndoView
QUndoStack
可存储多条QUndoCommand