我正在我们基于 Qt5 的图形应用程序中实现撤消/重做功能,使用 QUndoCommand
具有很好的 mergeWith(( 功能:例如,如果用户反复单击我的应用程序上的字体大小增加按钮,而不是在撤消列表中创建大量命令,它只会更新QUndoStack
上的一个命令。 因此,单个撤消将返回到原始字体大小。
这很好,但有时我不想自动合并命令。 例如,如果我将一个项目拖到新位置并将其放在那里,然后将同一项目拖到另一个位置:我的应用应该创建 2 个移动命令,而不是将它们合并为一个命令。
因此,以下是我认为创建逻辑中断的事件列表,用户将期望命令不会与下一个命令合并,即使下一个命令更改了同一对象的相同属性:
- 鼠标释放
- 小部件失去焦点
- 计时器(??? 秒后(
- 在???字符之后键入文本(或者这可以用计时器处理?
- 在按下某些键(例如退格键(后键入文本?
正如我列表中的问号所示,我不确定在什么情况下要抑制合并命令。 所以我的问题是,在这方面有什么最佳实践吗? 我在哪里可以找到它们?
FWIW,我没有找到任何最佳实践,但对于我的软件,我抑制了焦点更改时的合并(在我的应用程序中,这也发生在图形部分的鼠标释放上(。 此外,对于键入,如果输入位置以删除或键入 1 个字符的预期方式更改,并且如果用户在删除字符和键入字符之间切换,我将禁止合并。
我没有打扰计时器,也没有打字时的最大字符数。