QUndoCommand你会用吗

本文详细介绍了如何使用Qt'sUndoFramework在记事本程序中实现undo和redo操作,通过继承QUndoCommand类并实现redo和undo函数来支持文本删除等操作的撤销和重现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



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





 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值