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

时间:2013-03-03 13:51:30

标签: c++ qt

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

1 个答案:

答案 0 :(得分:8)

有两个核心课程: QUndoCommand QUndoStack ;

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

    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(),然后将其放入容器中进行撤消。
    4. 就是这样。