【问题标题】:Implementing Undo feature (like Ctrl+Z) in Qt/C++在 Qt/C++ 中实现撤消功能(如 Ctrl+Z)
【发布时间】:2023-09-13 19:52:01
【问题描述】:

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

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

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

假设有 QLineEdit 和文本 25。现在用户修改为 30。现在通过单击撤消,应该保留旧值 25。

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

【问题讨论】:

  • 我将“Back”编辑为“Undo”,这是该功能最典型的名称。

标签: c++ qt qt4 undo


【解决方案1】:

你可以使用Qt's undo framework

【讨论】:

  • 很抱歉没有解释如何实际实现您自己的撤消功能。在这方面,unwind 的回答要好得多。但是,如果您只是想要一个快速的、以 Qt 为中心的解决方案,那么它的撤消框架可能就是您想要的。
【解决方案2】:

实现撤消的典型方式是表示用户所做的每个操作,并存储它们。您还希望能够计算给定动作的逆运算。

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

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

请注意,这是一个抽象和通用的解释;正如其他答案所指出的那样,Qt 已经为实现 Undo 提供了一个框架,因此您当然应该首先对此进行调查。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        最近更新 更多