2010-11-18 149 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已经有一个框架来实现撤消,所以你应该首先调查一下。