一、简介

Qt的撤销/回撤框架是基于命令(Command)模式的实现,用于在应用程序中实现撤销/回撤功能。

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

二、类

该框架包括四个类:

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

三、概念

框架支持以下概念:

清洁状态:用于发信号通知文档何时进入并离开已保存到磁盘的状态。通常用于禁用或启用保存操作,以及更新文档的标题栏。

命令压缩:用于将命令序列压缩为单个命令。例如:在文本编辑器中,可以将在文档中插入单个字符的命令压缩为可插入整个文本部分的单个命令。这些较大的更改对于用户撤消和重做更加方便。

命令宏:一系列命令,所有这些命令都可以在一个步骤中撤消或重做。这些可以简化编写应用程序的任务,因为可以将一组更简单的命令组合成更复杂的命令。例如,可以通过组合一组命令来创建在文档中移动一组选定对象的命令,每个命令都可以移动一个对象。

【翻译】Qt撤销/回撤框架概述相关推荐

  1. Qt撤销回/撤框架:QUndoCommand

    一.描述 1.QUndoCommand表示对文档的单个编辑操作.例如,在文本编辑器中插入或删除文本块.QUndoCommand可以使用redo()将更改应用于文档,并使用undo()撤消更改.这些功能 ...

  2. Qt QUndoCommand(实现撤回和回撤)

    用到的类: 1.QUndoStack: 一个存放 QUndoCommand 命令的栈. 2.QUndoCommand:The QUndoCommand class is the base class ...

  3. 2021年大数据Spark(一):框架概述

    目录 Spark框架概述 Spark 是什么 分布式内存迭代计算框架 官方定义: Spark框架概述 Spark 是加州大学伯克利分校AMP实验室(Algorithms Machines and Pe ...

  4. 比特币继续回撤,BCH异动,警惕一日游行情

    大饼大幅回落,场外炒作沸沸扬扬,说什么的都有,但细究之下,说白了就是抛压大了,有人拿不住,有人凑热闹压压价而已,虽然我们拿着中线空单,但是长线趋势看涨还是不变.眼下,新一轮的一日游开始了,太子领头异动 ...

  5. 计算最大回撤_看专业分析研究员如何一步步解读外汇市场结构,实现交易最大化盈利化!...

    了解外汇市场结构有助于交易者清晰认知市场当前形势.作为一名专业的市场分析人员, Global Prime 的市场洞察评论员伊万·德尔加多(Ivan Delgado)将在本文中为我们解读分享外汇市场结构 ...

  6. Flink源码剖析:回撤流

    文章目录 1. 定义 2. 示例 2.1 源码分析 2.1.1 聚合算子回撤 2.1.2 Sink算子回撤 2.1.3 聚合算子回撤 VS Sink算子回撤 1. 定义 Flink中,Kafka So ...

  7. android环信3.0v回撤,环信Android消息回撤

    环信现在的消息回撤开发文档没有更新, 所以得自己去写, 本人贡献点小东西.本项目用的SDK版本为3.3.1. 1. 首先在聊天消息里添加消息长按事件监听,里面添加撤回消息选项. 撤回点击之后处理为: ...

  8. 《Python股票量化交易从入门到实践》随书赠送“回测框架”的使用帮助

    点击:QTYX最新版本使用指南[文字版] 点击:QTYX最新版本使用指南[视频版] 点击: QTYX历史版本更新说明 赠送"回测框架"的目的 为了帮助读者再建立一座从书本知识到实战 ...

  9. 量化策略——准备3 数据、Backtrader回测框架与quantstats评价指标

    我们一般使用AKShare这个库来获取股票数据或策略中用得到的数据: AKShare github主页:https://github.com/akfamily/akshare 使用Backtrader ...

最新文章

  1. Fileupload-1.2.1使用简单样例
  2. DM8168 编译filesystem步骤
  3. kali linux超级用户_如何优雅的在Linux上使用Powershell]
  4. mysql日志管理_关于MySQL的日志管理(binlog)
  5. 玩转oracle 11g(23):区分大小写和字符集不同
  6. 一个非常强大的静态导航网站nav
  7. 菜鸟教程python在线编译器-Python3 教程 | 菜鸟教程
  8. 【高数】Abel定理,幂级数的和收敛半径,不同幂级数收敛半径的比较,缺项幂级数的解法
  9. go基础:xml解析
  10. java 3des解密_Java进行3DES加密解密详解
  11. SpringBoot整合JpaMapper实现基于mybatis的快速开发
  12. 用HTML加css做成的新年特效,使用css3和html给网站添加上春节灯笼特效的源码分享...
  13. 我在哪?从何处来,又到哪里去?
  14. 正斜杠“/“和反斜杠“\“的区别
  15. Linux内存管理:HighMemory
  16. 在html中如何使div在页面中居中显示
  17. ie收藏夹在电脑什么位置
  18. Invalid content was found starting with element ‘{“http://maven.apache.org/POM/4.0.0“:dependency}‘.
  19. 一行神奇的javascript代码
  20. 物联网设备数据流转之搭建环境:开源云原生分布式物联网MQTT消息服务器EMQX

热门文章

  1. 1.《阿西莫夫:机器人短篇全集》
  2. ui设计学习路线图分享送给初学者
  3. win7系统设置无线临时(计算机到计算机)网络 手机,Win7无线临时网络允许移动WIFI和“启用Internet连接共享”...
  4. java 获取当前时间是第几周
  5. 深入理解网络通信与tcp/ip协议
  6. 如何实现一个sandbox?
  7. linux --- linux目录结构
  8. 学生用计算机怎么去掉,怎样把学生使用的计算器关掉
  9. 在arcengine中实现图片预览
  10. Place Holder 方法