2013-03-03 27 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