QML使用C++model(撤销恢复)

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

上一篇介绍了model实现排序和过滤,实际项目中model/view不止用来显示数据,还会用于实现比较复杂的界面交互,某些情况下需要支持撤销恢复的功能

Qt Undo Framework

介绍

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

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

该框架由四类组成:

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

概念

该框架支持以下概念:

  • Clean state:用于在文档进入和离开已保存到磁盘的状态时发出信号。这通常用于禁用或启用保存操作,以及
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值