Qt 撤销框架概述
简介
Qt 的撤销框架是命令模式的一种实现,用于在应用程序中实现撤销/重做功能。
“命令”模式基于这样一个理念:应用程序中的所有编辑操作都是通过创建命令对象的实例来完成的。命令对象对文档应用更改,并存储在命令堆栈中。此外,每个命令都知道如何撤销其更改,以将文档恢复到之前的状态。 只要应用程序仅使用命令对象来更改文档的状态,就可以通过从命令堆栈顶部向下遍历,并依次对每个命令调用“撤销”方法,来撤销一系列命令。同样,也可以通过从命令堆栈底部向上遍历,并依次对每个命令调用“重做”方法,来重做一系列命令。
类
该框架由四个类组成:
- QUndoCommand 是存储在撤销堆栈中的所有命令的基类。它可以应用(重做)或撤销文档中的单次更改。
- QUndoStack 是一个QUndoCommand 对象的列表。它包含在文档上执行的所有命令,并可通过撤销或重做这些命令来使文档状态回退或前进。
- QUndoGroup 是一组撤销堆栈。 当应用程序包含多个撤销堆栈时(通常每个打开的文档对应一个),该组件非常有用。QUndoGroup 为组中的所有堆栈提供一组撤销/重做槽。它将撤销和重做请求转发给活动堆栈,即与用户当前正在编辑的文档关联的堆栈。
- QUndoView 是一个显示撤销堆栈内容的小部件。点击视图中的某个命令,即可将文档状态回退或前进至该命令。
概念
该框架支持以下概念:
- 干净状态:用于指示文档何时进入或离开已保存到磁盘的状态。这通常用于禁用或启用保存操作,以及更新文档的标题栏。
- 命令压缩:用于将一系列命令压缩为单个命令。例如:在文本编辑器中,将单个字符插入文档的命令可以压缩为一个插入整段文本的命令。这些较大范围的更改更便于用户执行撤销和重做操作。
- 命令宏:一组命令序列,所有操作均可通过一步完成撤销或重做。这简化了应用程序的编写工作,因为可以将一组简单的命令组合成更复杂的命令。 例如,可以通过组合一系列分别用于移动单个对象的命令,来创建一个用于移动文档中一组选定对象的命令。
QUndoStack QAction 提供了方便的“撤销”和“重做”操作,这些操作可以插入到菜单或工具栏中。这些操作的文本属性始终反映了触发时将撤销或重做的是哪个命令。同样, 提供的“撤销”和“重做”操作始终表现得像当前堆栈中的“撤销”和“重做”操作一样。QUndoGroup
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.