Qt 的撤消框架概述

简介

Qt 的撤消框架(Undo Framework)是命令模式(Command pattern)的一种实现,用于在应用程序中实现撤消/重做功能。

命令模式所基于的理念是,应用程序中的所有编辑工作都是通过创建命令对象实例来完成的。命令对象对文档进行更改,并存储在命令栈中。此外,每个命令都知道如何撤销更改,使文档恢复到以前的状态。只要应用程序只使用命令对象来更改文档的状态,就可以通过向下遍历堆栈并依次调用每条命令的撤销来撤销一系列命令。也可以通过向上遍历堆栈并对每条命令调用重做来重做一系列命令。

该框架由四个类组成:

  • QUndoCommand 是存储在撤销堆栈中的所有命令的基类。它可以应用(重做)或撤销文档中的单个更改。
  • QUndoStack 是 对象的列表。它包含在文档上执行的所有命令,可以通过撤消或重做这些命令来向前或向后滚动文档的状态。QUndoCommand
  • QUndoGroup 是一组撤销堆栈。当应用程序包含多个撤销栈(通常每个打开的文档都有一个)时,它就非常有用。 为该组中的所有栈提供一对撤销/重做插槽。它将撤销和重做请求转发给活动栈,即与用户当前正在编辑的文档相关联的栈。QUndoGroup
  • QUndoView 是一个显示撤销堆栈内容的 widget。单击视图中的命令,文档状态会向前或向后滚动到该命令。

概念

框架支持以下概念:

  • 清洁状态:用于在文档进入和离开已保存到磁盘的状态时发出信号。这通常用于禁用或启用保存操作,以及更新文档的标题栏。
  • 命令压缩:用于将命令序列压缩为单个命令。例如在文本编辑器中,将单个字符插入文档的命令可压缩为插入整段文本的单一命令。这些较大的更改更便于用户撤销和重做。
  • 命令宏:在一个步骤中撤销或重做所有命令的序列。这些命令可以简化应用程序的编写任务,因为一组较简单的命令可以组成更复杂的命令。例如,在文档中移动一组选定对象的命令可以由一组命令组合而成,每条命令移动一个对象。

QUndoStack 在 中提供了方便的撤消和重做对象,这些对象可以插入到菜单或工具栏中。这些操作的文本属性总能反映出触发后将撤销或重做的命令。同样, 提供的撤消和重做操作始终与活动堆栈的撤消和重做操作行为相同。QAction QUndoGroup

© 2025 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.