代码之家  ›  专栏  ›  技术社区  ›  liaK

在Qt/C++中实现撤销功能(如CTRL+Z)

  •  3
  • liaK  · 技术社区  · 15 年前

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

    基本上,我将有一个用户界面,用户将在其中输入一些数据。他可以去修改用户界面中可用的值。用户界面将具有基本的qt用户界面元素,如 QLineEdit , QTableWidget 等。,

    所以现在,如果用户按下 Undo 按钮(或 CTRL+Z )前一个值应该保留在相应的ui元素中。

    说,如果有的话 Qlineedit公司 文本为25。现在用户修改为30。现在单击“撤消”,应保留旧值25。

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

    4 回复  |  直到 13 年前
        1
  •  7
  •   UniversE    13 年前

    你可以用 Qt's undo framework .

        2
  •  5
  •   unwind    15 年前

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

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

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

    请注意,这是一个抽象和一般的解释;正如其他答案所指出的,qt已经有了一个用于实现撤销的框架,所以您当然应该首先研究一下这个问题。

        3
  •  2
  •   hansmaad    15 年前

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

        4
  •  1
  •   OneOfOne    15 年前

    qlineedit具有内置的撤消/重做支持,导出为公共插槽,选中: http://doc.trolltech.com/4.7/qlineedit.html#undo

    推荐文章