C++ 无法理解Qt中的撤消重做框架

C++ 无法理解Qt中的撤消重做框架,c++,qt,C++,Qt,我正在学习使用Qt进行应用程序开发&我在开发应用程序方面相当成功。现在我想为我的应用程序实现撤销重做功能。关于此主题的详细信息很少。我甚至试着理解SDK中的两个示例。但我很难理解它是如何工作的。 谁能麻烦你给我解释一下如何实施它吗? 在我的应用程序中有各种状态,我希望为它们提供此功能。 那么,解释是否可以从一般的角度出发呢? 如果互联网上已经有文章对此进行了解释,请通知我。那将非常有帮助。 谢谢。有两个核心类:QUndoCommand和QUndoStack QUndoCommand是命令类的基类

我正在学习使用Qt进行应用程序开发&我在开发应用程序方面相当成功。现在我想为我的应用程序实现撤销重做功能。关于此主题的详细信息很少。我甚至试着理解SDK中的两个示例。但我很难理解它是如何工作的。 谁能麻烦你给我解释一下如何实施它吗? 在我的应用程序中有各种状态,我希望为它们提供此功能。 那么,解释是否可以从一般的角度出发呢? 如果互联网上已经有文章对此进行了解释,请通知我。那将非常有帮助。
谢谢。

有两个核心类:QUndoCommandQUndoStack

  • QUndoCommand是命令类的基类。您必须自己实现undo()和redo()
  • QUndoStack基本上是一个QUndoCommand对象的容器,具有创建QAction、查询当前QUndoCommand的undo/redo文本等额外方法(您可以轻松实现的简单功能)
  • 您需要做的是:

  • 执行你的命令。您需要根据自己的需要决定如何实现重做/撤消。类AppendText是一个很好的示例:
  • 为每个文档保留一个QUndoStack实例(如果应用程序中只有一个文档,则保留一个实例)
  • 假设您有一个“AppendText”命令类,在UI中有一个“Append”按钮。如果单击“Append”按钮,则需要创建一个AppendText命令实例,并调用QUndoStack::push(appendCmd)。QUndoStack::push()将首先调用AppendText::redo(),然后将其放入容器中进行撤消

  • 就这样。

    你不明白什么?具体的课程?概述?我能理解这4个类&它们的用途是什么,但我不知道如何使用它们,比如说QUndoCommand。是的,我了解一些细节,但我不明白为什么要使用Qt Undo Redo框架?实现我自己的类来记录会话的所有历史,然后根据状态执行undo/redo,不是更方便吗?我想问的是,与我自己为我的应用程序定制的框架相比,我从Qt的内置框架中得到了什么?对于简单的应用程序,Qt的撤销框架可以节省很多时间。但如果你有更好的解决方案,就去做吧。qt undo框架中没有什么神秘的东西迫使您使用它。