撤消/重做的命令模式:何时不合并撤消命令



我正在我们基于 Qt5 的图形应用程序中实现撤消/重做功能,使用 QUndoCommand 具有很好的 mergeWith(( 功能:例如,如果用户反复单击我的应用程序上的字体大小增加按钮,而不是在撤消列表中创建大量命令,它只会更新QUndoStack上的一个命令。 因此,单个撤消将返回到原始字体大小。

这很好,但有时我不想自动合并命令。 例如,如果我将一个项目拖到新位置并将其放在那里,然后将同一项目拖到另一个位置:我的应用应该创建 2 个移动命令,而不是将它们合并为一个命令。

因此,以下是我认为创建逻辑中断的事件列表,用户将期望命令不会与下一个命令合并,即使下一个命令更改了同一对象的相同属性:

  • 鼠标释放
  • 小部件失去焦点
  • 计时器(??? 秒后(
  • 在???字符之后键入文本(或者这可以用计时器处理?
  • 在按下某些键(例如退格键(后键入文本?

正如我列表中的问号所示,我不确定在什么情况下要抑制合并命令。 所以我的问题是,在这方面有什么最佳实践吗? 我在哪里可以找到它们?

FWIW,我没有找到任何最佳实践,但对于我的软件,我抑制了焦点更改时的合并(在我的应用程序中,这也发生在图形部分的鼠标释放上(。 此外,对于键入,如果输入位置以删除或键入 1 个字符的预期方式更改,并且如果用户在删除字符和键入字符之间切换,我将禁止合并。

我没有打扰计时器,也没有打字时的最大字符数。

相关内容

  • 没有找到相关文章

最新更新