qt‘s Undo Framework
2013-10-11 15:46
232 查看
今天在项目中使用了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实现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 Undo Framework Demo
- Qt Undo Framework
- 利用Qt Undo FrameWork解决数据回滚问题(撤销恢复)
- Qt 在mac 下添加第三方 framework的方法
- QT图形视图框架(The Graphics View Framework
- Qt's Undo Framework使用心得
- Qt Installer Framework 使用说明(一)
- Qt: The State Machine Framework 学习
- 使用Qt installer framework制作安装包(不知道是否适合Mac和Linux?)
- QT 绘图设备和Graphics View Framework
- Qt Installer Framework的学习
- QT图形视图框架(The Graphics View Framework)
- Qt Graphics View Framework(2)---坐标系
- Qt Installer Framework 使用说明(二)
- QT图形视图框架(The Graphics View Framework)
- Qt图片浏览器 --基于Qt的Graphics View Framework
- QT 绘图设备和Graphics View Framework
- Qt Installer Framework的学习(三)
- Qt绘图3--Graphic View Framework
- 使用 Qt InstallFramework 进行程序打包(一)