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设计模式,待补充。