2013-03-03 53 views
5

我正在学习如何将Qt用于我的应用程序开发&我在开发我的应用程序方面取得了相当的成功。现在我想为我的应用程序实现撤销重做功能。该主题的doc几乎没有任何信息。我甚至尝试了解SDK中的两个示例。但是我很难理解它是如何工作的。 有人可以请我解释一下如何实现它吗? 我的应用程序中有各种状态,我想提供此功能。 那么从一般的角度来说,解释是可以的吗? 如果互联网上已经有文章解释相同的话,请通知我。这将是非常有益的。 谢谢。无法理解撤销Qt中的重做框架

+0

你不明白什么?具体的课程?概述? – Synxis 2013-03-03 13:58:24

+0

我可以理解4个类和他们的目的是什么,但我不知道如何使用它们,比如说QundoCommand。 – 2013-03-03 14:02:42

回答

8

有2个核心类:QUndoCommandQUENDoStack;

  1. QUndoCommand是您的命令类的基类。你必须自己实现undo()和redo()。
  2. QUndoStack基本上QUndoCommand对象的容器,用额外的方法,如创建的QAction,查询撤销/重做当前QUndoCommand的文本(你可以很容易地实现自己的简单功能)

你需要做的是:

  1. 实施您的命令。您需要根据自己的需要决定如何执行重做/撤消操作。类AppendText就是一个很好的例子:http://qt-project.org/doc/qt-5.0/qtwidgets/qundocommand.html
  2. 为每个文档保留一个QUODStack实例(或者如果应用程序中只有一个文档,则保留一个实例)。
  3. 假设您有一个“AppendText”命令类,并且在UI中有一个“Append”按钮。如果单击“添加”按钮,则需要创建一个AppendText命令实例,并调用QUndoStack :: push(appendCmd)。 QUENDoStack :: push()将首先调用AppendText :: redo(),然后将其放入容器中以进行撤消。

就是这样。

+1

是的,我理解了一些零碎,但我不明白为什么我会使用Qt撤销重做框架呢? 实现我自己的课程会不会更方便?所有会话历史记录都会根据状态进行撤消/重做? 我想问的是我从Qt的内置框架得到的结果,与我为自己的应用程序定制的自己的框架相比? – 2013-03-03 14:45:26

+1

对于简单的应用程序,qt的撤销框架可以节省大量时间。但是,如果你有更好的解决方案,就去做吧。在qt撤销框架中没有什么神秘的东西可以强制你使用它。 – Chen 2013-03-03 14:54:48

+0

好的谢谢你的帮助。 – 2013-03-03 15:03:51