Я реализую функцию отмены/повторения в нашем графическом приложении на основе Qt5, используя QUndoCommand
s, которые имеют удобную функцию mergeWith(): например, если пользователь неоднократно нажимает кнопку увеличения размера шрифта в моем приложении, а не создает тонну команд в списке отмены, он просто обновляет одну команду в QUndoStack
. Таким образом, одна отмена вернет исходный размер шрифта.
Это здорово, но иногда я не хочу автоматически объединять команды. Например, если я перетащу элемент в новое место и оставлю его там, а затем перетащу тот же элемент в другое место: мое приложение должно создать 2 команды перемещения, а не объединить их обе в одну команду.
Итак, вот список событий, которые, я думаю, создают логический разрыв, когда пользователь ожидает, что команда НЕ будет объединена со следующей командой, даже если следующая команда изменяет то же свойство того же объекта:
- релиз мыши
- виджет теряет фокус
- таймер (через ??? секунд)
- ввод текста, после ??? символов (или это можно обработать с помощью таймера?)
- ввод текста после нажатия определенных клавиш, например backspace?
Как указано в вопросительных знаках в моем списке, я не совсем уверен, в каких ситуациях следует подавлять команды слияния. Итак, мой вопрос: есть ли какие-либо передовые методы в этом отношении? Где их найти?