Qt中的撤销重做框架无法理解

6
我正在学习使用Qt进行应用程序开发,目前已经相当成功地开发了我的应用程序。现在我想为我的应用程序实现撤销/重做功能。关于这个主题的文档提供的信息很少。我甚至尝试从SDK中的两个示例中理解它。但是我很难理解它是如何工作的。 有许多状态需要在我的应用程序中提供此功能。 因此,能否从一般的角度进行解释? 如果已经有解释相同内容的文章,请告知我。那将非常有帮助。 谢谢。

你不明白什么?具体的类?概览? - Synxis
我能理解这4个类及其目的,但我不知道如何使用它们,比如QUndoCommand。 - Cool_Coder
1个回答

9
有两个核心类:QUndoCommandQUndoStack
  1. QUndoCommand是您的命令类的基类。您需要自己实现undo()和redo()方法。
  2. QUndoStack基本上是一个包含QUndoCommand对象的容器,带有一些额外的方法,例如创建QAction,查询当前QUndoCommand的撤销/重做文本等简单功能,这些功能您可以轻松自己实现。

您需要做的是:

  1. 实现您的命令。您需要根据您的需求决定如何自定义实现redo/undo方法。类AppendText是一个很好的例子: http://qt-project.org/doc/qt-5.0/qtwidgets/qundocommand.html
  2. 为每个文档保留一个QUndoStack实例(如果应用程序中只有一个文档,则仅保留一个实例)。
  3. 假设您有一个名为“AppendText”的命令类,并且UI中有一个名为“Append”的按钮。如果单击“Append”按钮,您需要创建一个AppendText命令实例,并调用QUndoStack :: push(appendCmd)。QUndoStack :: push()首先将调用AppendText :: redo(),然后将其放入撤消容器中。

就是这样。


1
我理解了一些,但是我不明白为什么要使用Qt的撤销重做框架呢? 实现自己的类来记录会话历史记录,然后根据状态执行撤销/重做不是更方便吗? 我想问的是,与我为我的应用程序定制的框架相比,Qt内置框架能给我带来什么? - Cool_Coder
1
对于简单的应用程序,Qt的撤销框架可以节省很多时间。但是如果您有更好的解决方案适用于您的情况,请直接使用它。Qt的撤销框架并没有强制您使用它,其中没有任何神秘之处。 - Chen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接