在Qt / C ++中实现撤消功能(如Ctrl + Z)

时间:2010-11-18 09:34:46

标签: c++ qt qt4 undo

我在Windows XP上使用Qt 4.5C++

基本上我将拥有一个用户输入一些数据的UI。他可以去修改UI中可用的值。用户界面将具有基本的Qt UI元素,如QLineEditQTableWidget等,

现在,如果用户按下Undo按钮(或 Ctrl + Z ),则应在相应的UI元素中保留先前的值。

说,如果QLineEdit包含文本25.现在用户修改为30.现在通过单击撤消,应保留旧值25。

与许多应用程序中通常可用的撤消功能类似。有什么办法吗?

4 个答案:

答案 0 :(得分:7)

您可以使用Qt's undo framework

答案 1 :(得分:5)

实现撤消的典型方法是表示用户完成的每个操作,并存储它们。您还希望能够计算给定操作的反转。

因此,对于插入文本缓冲区,操作将存储插入的文本以及插入发生的位置。然后,逆变为删除,在同一位置和插入文本的大小。

当用户要求应用程序撤消时,只需查看最近存储的操作,然后执行其反向操作。如果你现在不是删除“花费”的动作,也要记住它,你可以通过在动作历史中移动另一种方式来实现重做。

请注意,这是一个抽象的通用解释;正如其他答案所指出的那样,Qt已经有了实施撤销的框架,所以你当然应该先调查一下。

答案 2 :(得分:2)

您可以使用Command Pattern来实现撤消/重做

答案 3 :(得分:1)

QLineEdit具有内置的撤消/重做支持,导出为公共广告位,请检查:http://doc.trolltech.com/4.7/qlineedit.html#undo