————————————————
版权声明:文章摘自百度知道的回答,版权归原作者所有,转载请附上原文出处链接及本声明。。
原文链接:https://zhidao.baidu.com/question/1638894180919572660.html
看到一个百度知道的一个回答可能可以实现画图撤销功能,还没有测试,但方法应该是对的,为方便以后查找,因此摘抄写下来,没有验证,也有可能实现不了。
是指Redo和Undo吗?
如果是, 那么请注意两个核心类QUndoCommand 和 QUndoStack
-
QUndoStack
可以看作是是控制器
它的作用是提供动作的存储(Do), 控制动作恢复(Redo), 撤销(Undo), 甚至复杂的动作合并(将同样的Command合成为一个), 动作宏(通过描述符来描述一些列动作), 等等
-
而QUndoCommand
可以看作是一种动作, 它保存了你动作的状态, 同时也提供在恢复和撤销时的行为
(例如, 当用户拖动从开始到结束, 可以把整个行为看成"拖动"动作, 它存储了拖动的坐标)
当然, 动作的粒度可以你自己来定义, 也可以把上述例子分成多个动作(拖动开始, 拖动以及拖动结束)
那么, 模型就很简单了, 你看, 你只需要实现对应的QUndoCommand即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
上述的代码仅仅提供流程说明, 直接手打的, 不涉及任何项目和API, 具体还是应该看QT的文档, 这块也有比较详细的说明, 请搜索关键字"Qt Undo Framework"
————————————————
版权声明:文章摘自百度知道的回答,版权归原作者所有,转载请附上原文出处链接及本声明。。
原文链接:https://zhidao.baidu.com/question/1638894180919572660.html