qt QUndoGroup的使用
最近项目中用到撤销,恢复功能。qt的demo中有一个例子,是类似于单文档的。而我的项目中是类似于多文档的项目,即可能要打开多个页面,不同的页面都有撤销恢复功能。这样的话,就要用到QUndoGroup类。网上资料相对较少。我把自己的探索写出来,抛砖引玉,和大家讨论。
我把我的工程结构大概描述一下:MainFrame为主框架,MainFrame有菜单栏,且在MainFrame中有多个tab页(多个窗口)。
这样,我下文中将tab页的两个窗口类名记为A,B。
我在MainFrame类中定义成员变量 QUndoGroup* undoGroup; QMenu* editMenu; (当然还有其他menu,这里略)
在A,B中分别定义 QUndoStack* undoStack;
在初始化的时候,创建菜单
editMenu = menuBar()->addMenu("编辑");
undoGroup = new QUndoGroup(this);
undoAction = undoGroup->createUndoAction(this, "撤销");
undoAction->setShortcuts(QKeySequence::Undo);
redoAction = undoGroup->createRedoAction(this, "恢复");
redoAction->setShortcuts(QKeySequence::Redo);
editMenu->addAction(undoAction);
editMenu->addAction(redoAction);
以上代码在mainwindow构造函数中。
在不同的tab页的窗口(A、B)类中,定义QUndoStack* undoStack;并初始化。
初始化时,undoStack = new QUndoStack(MainWindow*);这里要用MainWindow的指针。
为了方便,可以定义全局MainWindow* pMain,在MainWindow的构造函数中,pMain = this;在A和B类中定义函数initUndoStack
void initUndoStack()
{
undoStack = new QUndoStack(pMain);
pMain->undoGroup.addStack(undoStack);
}
切换tab页时,要激活对应tab页的undoStack:即undoStack->setActive(true);
如我在A、B类中分别定义函数
void setUndoStackActive(bool bActive)
{
undoStack->setActive(bActive);
}
切换窗口时,调用对应的类的setUndoStackActive函数即可。
对于QUndoCommand类的使用,可参考Qt 的示例Undo FrameWork Example
qt QUndoGroup的使用的更多相关文章
- Qt Undo Framework Demo
Qt Undo Framework Demo eryar@163.com Abstract. Qt’s Undo Framework is an implementation of the Comma ...
- 将vim作为QT开发的IDE
转载请注明链接与作者huihui1988 用了一段时间的vim,喜欢上了这种简洁高效的编辑器.恰逢正在学习QT中,于是将vim变成了开发QT的工具.以下是具体配置. 一.语法高亮支持: 1.打开VIM ...
- qt 5.2.1类和模块的关系图
QT│ ├─ActiveQt│ │ ActiveQt│ │ ActiveQtDepends│ │ ActiveQtVersion│ │ QAxAggregated│ │ QAxB ...
- Qt's Undo Framework
Overview of Qt's Undo Framework Introduction Qt's Undo Framework is an implementation of the Command ...
- Qt Undo Framework
Qt undo/redo 框架 基于Command设计模式 支持命令压缩和命令合成 提供了与工具包其他部分融合很好的widgets和actions 术语(Terminology) Command - ...
- QT内省机制、自定义Model、数据库
本文将介绍自定义Model过程中数据库数据源的获取方法,我使用过以下三种方式获取数据库数据源: 创建 存储对应数据库所有字段的 结构体,将结构体置于容器中返回,然后根据索引值(QModelIndex) ...
- Ubuntu 下安装QT
Ubuntu 下安装QT 本文使用的环境 QT Library: qt-everywhere-opensource-src-4.7.4.tar.gz QT Creator: qt-creator-li ...
- Qt安装配置
Qt Creator: 下载: Qt 5.5.1 for Windows 32-bit(MinGW 4.9.2, 1.0 GB):http://download.qt.io/official_rele ...
- Qt信号与槽自动关联机制
参考链接1:http://blog.csdn.net/skyhawk452/article/details/6121407 参考链接2:http://blog.csdn.net/memory_exce ...
随机推荐
- C++ Arrays, std::array, std::vector 总结
原文来自: https://shendrick.net/Coding%20Tips/2015/03/15/cpparrayvsvector.html @Seth Hendrick Original a ...
- IDC机房跳线
服务网卡口与配线架 这里有一根网线 记录方式 签 A:23FM-23U-T07 (配线架网线) B:23FM-23U-NIC1(服务器网线) 在配线架的机柜旁边一定写明了 跳线的对面的 交换和配线 ...
- 数据库导出数据到excel格式
场景: 由于业务人员经常会找DBA导出一些数据,写了一个自动导出脚本. import pymysql from openpyxl import Workbook from openpyxl.write ...
- mysql ALTER TABLE语句 语法
mysql ALTER TABLE语句 语法 作用:用于在已有的表中添加.修改或删除列.无铁芯直线电机 语法:添加列:ALTER TABLE table_name ADD column_name da ...
- #419 Div2 Problem C Karen and Game (贪心 && 暴力)
题目链接:http://codeforces.com/contest/816/problem/C 题意 :给出一个 n*m 的变化后的矩阵,变化前矩阵的元素全是0,变化的规则是选择其中的一行或者一列将 ...
- [LightOJ1008]Fibsieve`s Fantabulous Birthday 题解
前言 扫了一眼网上的题解,都是找规律. 估计就我一个蒟蒻在打二分. 题解 设一个" ┐"形为一层. 我们二分查找该数在那一层,然后就可以直接计算它的位置了. 代码 #include ...
- SpringBoot2.2发行版新特性
Spring Framework升级 SpringBoot2.2的底层Spring Framework版本升级为5.2. JMX默认禁用 默认情况下不再启用JMX. 可以使用配置属性spring.jm ...
- Sparrow 开发板化身电脑音量调节器
前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正. 之前的新浪不能用啦,这次部分图片用的sm.ms的图床,加载慢,请耐心,准备换图床. 1.开箱简介 来填坑了!这次是 Sparrow ...
- 详解cocos2dx 3.0的release版本在android平台的签名过程
当您的游戏准备发布前,需要编译成为release版本,命令中需要增加 -m release,编译命令如下: cocos compile -p android -m release 在编译结束后,生成x ...
- [CSP-S模拟测试]:Cicada拿衣服(暴力+乱搞)
题目传送门(内部题94) 输入格式 第一行两个整数$n,k$,代表衣服的数量和阈值. 接下来一行$n$个数,第$i$个数$a_i$表示每件衣服的愉悦值. 输出格式 输出一行$n$个数,第$i$个数为$ ...