Qt撤销、恢复

QUndoStack

QUndoStack类是QUndoCommand对象的堆栈。

撤销堆栈维护已应用于文档的命令堆栈。

使用push()将新命令推送到堆栈上。命令可以使用undo()和redo()来撤销和重做,或者触发createUndoAction()和createRedoAction()返回的操作。

QUndoStack跟踪当前命令。这是将在下一次调用redo()时执行的命令。该命令的索引由index()返回。可以使用setIndex()前滚或回滚已编辑对象的状态。如果堆栈上最上面的命令已经被重做,index()等于count()。

QUndoStack提供了对撤销和重做操作、命令压缩、命令宏的支持,并支持干净状态的概念。

QUndoCommand

QUndoCommand类是存储在QUndoStack上的所有命令的基类。

QUndoCommand表示一个文档上的单个编辑操作;例如,在文本编辑器中插入或删除文本块。QUndoCommand可以用redo()对文档应用更改,用undo()撤消更改。这些函数的实现必须在派生类中提供。

QUndoGroup

QUndoGroup类是一组QUndoStack对象。

有关Qt撤消框架的概述,请参阅概述。

一个应用程序通常有多个撤消堆栈,每个打开的文档对应一个撤消堆栈。同时,一个应用程序通常有一个撤消操作和一个重做操作,这将触发活动文档中的撤消或重做。

QUndoGroup是一组QUndoStack对象,其中一个可能是活动的。它有一个undo()和redo()槽,用于调用active stack的QUndoStack::undo()和QUndoStack::redo()。它还具有createUndoAction()和createRedoAction()函数。这些函数返回的操作与活动栈的QUndoStack::createUndoAction()和QUndoStack::createRedoAction()返回的操作相同。

用addStack()将堆栈添加到组中,用removeStack()将其删除。当以组作为其父QObject创建堆栈时,堆栈会隐式添加到组中。

程序员有责任通过调用QUndoStack::setActive()来指定哪个堆栈是活动的,通常是在相关的文档窗口接收到焦点时。活动堆栈也可以用setActiveStack()设置,并由activeStack()返回。

当使用addStack()将堆栈添加到组中时,组不接受堆栈的所有权。这意味着堆栈必须从组中单独删除。当一个堆栈被删除时,它会自动从一个组中删除。一个堆栈只能属于一个组。将它添加到另一个组将导致它从前一个组中被删除。

QUndoGroup与QUndoView相结合也很有用。如果一个QUndoView被设置为使用QUndoView::setGroup()来监视一个组,它将更新自己来显示活动堆栈。

参考qt官方例程:undoframework和undoframework example

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fyzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值