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 ...
随机推荐
- 解决SonarQube启动时直接挂掉问题
症状:启动SonarQube时,系统启动,但是马上关闭 查看日志,提示ElasticSearch启动有问题ClusterBlockException[blocked by: [FORBIDDEN/12 ...
- 【java】并发执行ExecutorService的sumbit返回值的顺序问题
ArrayList<Future> fl = new ArrayList<Future>(); for (int i = 0; i < 10; i++) { Future ...
- 19.顺时针打印矩阵(python)
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- Vue结合后台的增删改案例
首先列表内容还是与之前的列表内容类似,不过此处我们会采用Vue中数据请求的方式来实现数据的增删.那么我们使用的Vue第三方组件就是vue-resource,vue发起请求的方式与jQuery的ajax ...
- void 运算符和 逗号运算符
一.void 运算符 void 运算符的作用目的是 执行一个表达式,但是不用返回任何值,或者是返回undefined void 本身就有 无效.空的 的意思. void运算符的用法: 1.不加括号的写 ...
- Tensorflow视频教程&Pytorch视频教程
基于tensorflow做研究和基于pytorch做研究哪个好?哪个更容易复制代码,工业上更易用.Keras和tensorflow.pytorch的关系. Keras:Keras是一个由Python编 ...
- Eclipse怎样对项目进行重命名?
当创建一个项目时,可能会随便命名一个项目名,如果想要项目名更有意义,或者为了方便后续项目的命名,怎么重命名项目名呢? 第一步在我们的电脑打开eclipse软件,找到需要重命名的项目,如下图所示: 第二 ...
- Vue中基本指令用法
指令在Vue中是个很重要的功能,在Vue项目中是必不可少的.根据官网的介绍,指令 (Directives) 是带有 v- 前缀的特殊属性.指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地 ...
- Mybatis 一对多 关联查询查询
一对多 与 一对一 查询有许多相似之处. 最主要的区别是 查询结果是list,与之对应的标签为collection. 班级和学生,一个班有多个学生,而每个学生只能属于一个班. 此时班级编号作为学生表的 ...
- 如何让你的JS代码写的更漂亮
感觉这篇文章总结的js的规范写法不错,拿来收藏.转自:https://mp.weixin.qq.com/s/AtR94IL9BW9EXOTnKOilmA 1. 按强类型风格写代码 JS是弱类型的,但是 ...