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

Coo*_*der 5 c++ qt

我正在学习使用Qt进行应用程序开发,并且我非常成功地开发了我的应用程序.现在我想为我的应用程序实现撤消重做功能.该主题的文档几乎没有信息.我甚至尝试过从SDK中的两个例子中理解.但我很难理解它是如何运作的.有人可以帮我解释一下如何实现它吗?我的应用程序中有各种状态,我想提供此功能.那么解释是否可以从一般的角度来看?如果互联网上已有文章解释相同,请通知我.这将非常有帮助.谢谢.

Che*_*hen 8

有两个核心类:QUndoCommandQUndoStack ;

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

你需要做的是:

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

而已.