qt QUndoGroup的使用

Posted warmlight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;并初始化。

切换tab页时,要激活对应tab页的undoStack:即undoStack->setActive(true);

如我在A、B类中分别定义函数

void setUndoStackActive(bool bActive)

{

  undoStack->setActive(bActive);

}

切换窗口时,调用对应的类的setUndoStackActive函数即可。

 

对于QUndoCommand类的使用,可参考Qt 的示例Undo FrameWork Example

以上是关于qt QUndoGroup的使用的主要内容,如果未能解决你的问题,请参考以下文章

26.Qt Quick QML-RotationAnimationPathAnimationSmoothedAnimationBehaviorPauseAnimationSequential(代码片段

Qt编程遇到的问题,我在qt中直接使用C语言的程序片段,有问题 ,求解

Qt Stylesheet 影响整个小部件

QT QHttpMultiPart上传图片

Qt中的OpengL glDrawBuffers()?

在 matplotlib 内联和 QT 后端之间切换 Python 脚本