2010-11-18 154 views
3

我在Windows XP上使用Qt 4.5C++在Qt/C++中實現撤消功能(如Ctrl + Z)

基本上我會有一個用戶將輸入一些數據的用戶界面。他可以去修改UI中可用的值。用戶界面將具有基本Qt的UI元素等QLineEditQTableWidget等,

所以,現在,如果用戶按下Undo按鈕(或Ctrl + Z鍵)的先前值應在相應的UI元素被保留。

說,如果有QLineEdit與文本25.現在用戶修改爲30.現在通過單擊撤消,舊值25應保留。

像許多應用程序中通常可用的撤消功能一樣。有什麼辦法可以做到嗎?

+1

我主編的「返回」到「撤銷」,這是此功能最典型的名稱。 – unwind 2010-11-18 09:41:26

回答

7

你可以使用Qt's undo framework

+0

對不起,不解釋如何實際實現自己的撤消功能。在這方面,unwind的答案要好得多。如果你只是想要一個快速的,以Qt爲中心的解決方案,那麼它的撤銷框架可能就是你想要的。 – gspr 2010-11-18 09:53:17

5

實現「撤消」的典型方法是表示用戶完成的每個操作並將其存儲。您還希望能夠計算給定動作的逆。

因此,對於插入到文本緩衝區中,該操作將存儲插入的文本以及插入發生的位置。反過來然後變成刪除,在相同的位置和插入文本的大小。

當用戶要求應用程序撤消時,只需查看最近存儲的操作並執行其反轉即可。如果您現在不是刪除「已用」操作,請記住它,您可以通過在操作歷史中移動另一種方式來實施重做。

請注意,這是一個抽象和通用的解釋;正如其他答案指出的那樣,Qt已經有一個框架來實現撤消,所以你應該首先調查一下。