Qt的撤销框架概述

简介

Qt的撤销框架是对命令模式的实现,用于在应用程序中实现撤销/重做功能。

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

该框架由四个类组成

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

概念

以下概念由框架支持

  • 干净状态:用于表示文档何时进入和离开已保存到磁盘的状态。这通常用于启用或禁用保存操作,并更新文档的标题栏。
  • 命令压缩:用于将一系列命令压缩为一个单一命令。例如:在一个文本编辑器中,将单个字符插入文档的命令可以压缩为一个插入整个文本段的命令。这些更大的更改使用户撤销和重做操作更方便。
  • 命令宏:一系列命令,一次撤销或重做。这简化了编写应用程序的任务,因为一组较简单的命令可以组合成更复杂的命令。例如,通过组合移动单个对象的命令集,可以创建一个移动文档中选中对象的命令。

QUndoStack 提供方便的撤销和重做 QAction 对象,可以将它们插入到菜单或工具栏中。当这些操作被触发时,它们的文本属性始终反映将撤销或重做的命令。同样,QUndoGroup 提供撤销和重做操作,其行为始终类似于活动堆栈的撤销和重做操作。

© 2024 Qt公司。本文档中包含的文档贡献属于其各自的版权所有者。本提供的文档是根据由自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款许可的。Qt及其相应的标志是芬兰的Qt公司以及/或全球其他国家的商标。所有其他商标均为其各自所有者的财产。