上一篇介绍了model实现排序和过滤,实际项目中model/view不止用来显示数据,还会用于实现比较复杂的界面交互,某些情况下需要支持撤销恢复的功能
Qt Undo Framework
介绍
Qt的撤销框架是命令模式的一个实现,用于在应用程序中实现撤销/重做功能。
命令模式基于这样一种思想,即应用程序中的所有编辑都是通过创建命令对象的实例来完成的。命令对象将更改应用于文档,并存储在命令堆栈中。此外,每个命令都知道如何撤销其更改,以将文档恢复到之前的状态。只要应用程序只使用命令对象来改变文档的状态,就可以通过向下遍历堆栈并依次对每个命令调用undo来撤销一系列命令。还可以通过向上遍历堆栈并对每个命令调用redo来重做一系列命令。
类
该框架由四类组成:
- QUndoCommand是存储在撤消堆栈上的所有命令的基类。它可以应用(重做)或撤消文档中的单个更改。
- QUndoStack是一个列表QUndoCommand对象。它包含对文档执行的所有命令,并且可以通过撤销或重做这些命令来向后或向前滚动文档的状态。
- QUndoGroup 是一组撤消堆栈。当一个应用程序包含多个撤销堆栈时,这是很有用的,通常每个打开的文档都有一个撤销堆栈。QUndoGroup 为组中的所有堆栈提供一对撤消/重做插槽。它将撤销和重做请求转发到活动堆栈,该堆栈与用户当前正在编辑的文档相关联。
- QUndoView 是一个显示撤销堆栈内容的小部件。单击视图中的命令会将文档状态向前或向后滚动到该命令。
概念
该框架支持以下概念:
- Clean state:用于在文档进入和离开已保存到磁盘的状态时发出信号。这通常用于禁用或启用保存操作,以及

本文详细介绍了如何在Qt中结合Model和View,利用QtUndoFramework实现数据模型的增删操作的撤销和重做功能,包括QUndoCommand、QUndoStack、QUndoGroup和QUndoView的运用,以及撤销框架的工作原理和应用场景。
&spm=1001.2101.3001.5002&articleId=125461502&d=1&t=3&u=c9ded8105d3348828d8af9cf67b517ce)
1401

被折叠的 条评论
为什么被折叠?



