码迷,mamicode.com
首页 > 其他好文 > 详细

QUndoCommand你会用吗

时间:2014-12-31 18:29:50      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:



采用Qt‘s Undo Framework实现undo和redo操作。

比如在做一个记事本程序  想要实现一个删除文本的操作,这个操作可以撤销和重现,即可以实现所谓的undo()和redo()操作。

此时只需让删除操作继承至QUndoCommand类,比如叫做DeleteTextCommand,并实现redo和undo这两个虚函数。在删除操作的响应槽函数SlotDeleteText()中,创建DeleteTextCommand对象,并放入QUndoStack。

如下代码所示:

删除类.h文件
class DeleteTextCommand:public QUndoCommand
{
public:
// 构造函数
         DeleteTextCommand();
  // 实现redo 、undo
void undo();
void redo();
}
在undo和redo函数中实现具体的操作,在redo中实现删除操作,undo中实现撤销删除操作,恢复删除之前的状态,思路是在redo中保存一份被删除的东西的列表,在undo中获取,就是使用这份列表进行复原。
删除槽函数:
void CMainWin::slotDeleteText()
{
    QUndoCommand *pDeleteTextCommond = new DeleteTextCmd();
    m_pUndoStack->push(pDeleteTextCommond);
//push的时候会自动去调用DeleteTextCmd的redo方法。
}
需要注意的是:在QUndoStack把命令push到堆栈的时候,会自动调用一次此命令的redo方法。
在主函数中  实现撤销和复原功能如下,如下写:

void WorkflowSceneManager::slotUndo()
{
    m_pUndoStack->undo();//自动调用DeleteTextCommand的undo方法
    HideAllModuleNameEdit();
}
void WorkflowSceneManager::slotRedo()
{
    m_pUndoStack->redo();//自动调用DeleteTextCommand的redo方法
    HideAllModuleNameEdit();
}
具体原理为command设计模式,待补充。





 

QUndoCommand你会用吗

标签:

原文地址:http://blog.csdn.net/hudfang/article/details/42296621

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!