qt‘s Undo Framework
来源:互联网 发布:软件培训计划 编辑:程序博客网 时间:2024/06/04 18:17
今天在项目中使用了Qt's Undo Framework实现了undo 和redo功能,初步尝试,此框架还挺好用。下面把使用心得与大家分享。
采用Qt's Undo Framework实现undo和redo操作。每类操作继承至QUndoCommand类,并实现redo和undo这两个虚函数,再在动作执行的时候创建此子类的对象,并放入QUndoStack。用QUndoStack创建redo和undo这个两个QAction,这两个QAction不需要对其进行设置信号和槽,在QUndoStack中创建Action的时候就已经完成。
需要注意的是:在QUndoStack把命令push到堆栈的时候,会自动调用一次此命令的redo方法,所以如果不加小心点时候,会发现执行了两次redo方法。可以在执行命令的时候,直接创建命令,再push到堆栈,在push之前不要执行命令。
实例如下:
一:首先声明命令对象如下:
class delCmd :public QUndoCommand
{
public:
// 构造函数
delCmd(GraphicsScene *gScene, QGraphicsItem* item,QUndoCommand *parent = 0);
// 实现redo 、undo
void undo();
void redo();
private:
GraphicsScene* m_scene;
QGraphicsItem* m_item;
};
二:在执行删除操作时创建命令
void GraphicsScene::iDelete()
{
foreach (QGraphicsItem *item, selectedItems())
{
if(item)
{
removeItem(item);
// 放入命令堆栈
delCmd* dcmd = new delCmd(this,item);
m_undoStack->push(dcmd);
}
}
}
三:创建redo/undo Action
QAction* GraphicsScene::createRedoAction()
{
QAction* redo = m_undoStack->createRedoAction(this,tr("重做"));
redo->setIcon(QIcon("images/stock_redo.png"));
return redo;
}
QAction* GraphicsScene::createUndoAction()
{
QAction* undo = m_undoStack->createUndoAction(this,tr("撤销"));
undo->setIcon(QIcon("images/stock_undo.png"));
undo->setShortcut(tr("ctrl+z"));
return undo;
}
四:把redo /undo Action加入到工具栏
QAction* undo = m_scene->createUndoAction();
QAction* redo = m_scene->createRedoAction();
ui->mainToolBar->addAction(undo);
ui->mainToolBar->addAction(redo);
五:结束语
本人从接触到使用只用了一天时间,所以写的不好,请谅解。
本文来源:http://yleesun.blog.163.com/blog/static/2941340220106245014562/
- qt‘s Undo Framework
- Qt Undo
- 利用Qt Undo FrameWork解决数据回滚问题(撤销恢复)
- 一个简单的Undo Redo Framework
- QT实例之二十(undo)
- qt中的undo和redo机制。
- [Junit]What's framework
- UNDO
- Undo
- undo
- undo
- Undo
- undo
- Undo
- Qt Graphics View Framework
- Qt Graphics View Framework
- Qt Service framework
- ROS in Qt framework
- Android游戏快速入门(二):绘制动态文字和图片
- [每天一个Linux小技巧] makefile 调试小技巧
- Android Push Notification实现信息推送使用
- LINUX和windows下如何判断CPU和系统是32位还是64位
- 用NDKr9编译最新ffmpeg2.0.1到android平台
- qt‘s Undo Framework
- hadoop2.x配置 - hadoop备份系数dfs.replication
- Unity3d对XML操作前期知识点_XML 命名空间(XML Namespaces)
- 多线程编程(1)
- hdu 2955 Robberies 01背包问题
- xp__显示桌面
- 《编程之美》电话号码对应字母组合问题
- C++对应c# 数据类型
- Android UI开发第三十四篇——SlidingPaneLayout