Шаблон команды для отмены / повтора: когда НЕ объединять команды отмены?

Я реализую функцию отмены / повтора в нашем графическом приложении на основе Qt5, используя QUndoCommandс хорошей функцией mergeWith (): например, если пользователь несколько раз нажимает кнопку увеличения размера шрифта в моем приложении, а не создает кучу команд в списке отмены, он просто обновляет одну команду в QUndoStack, Таким образом, одна отмена вернется к исходному размеру шрифта.

Это здорово, но иногда я не хочу автоматически объединять команды. Например, если я перетаскиваю элемент в новое место и перетаскиваю его туда, затем перетаскиваю тот же элемент в другое место: мое приложение должно создавать 2 команды перемещения, а не объединять их обе в одну команду.

Итак, вот список событий, которые, я думаю, создают логический разрыв, где пользователь будет ожидать, что команда НЕ будет объединена со следующей командой, даже если следующая команда изменит то же свойство того же объекта:

  • отпуск мыши
  • виджет теряет фокус
  • таймер (через ??? секунд)
  • набрав текст, после ??? символы (или это может быть обработано с помощью таймера?)
  • ввод текста после нажатия определенных клавиш, например, клавиши «Backspace»?

Как видно из вопросительных знаков в моем списке, я не совсем уверен, в каких ситуациях следует подавлять команды слияния. Поэтому мой вопрос: есть ли лучшие практики в этом отношении? Где я могу их найти?

0

Решение

Между прочим, я не нашел лучших рекомендаций, но для своего программного обеспечения я подавил слияния при смене фокуса (что в моем приложении также происходит при отпускании мыши на графической части). Кроме того, для набора текста я подавляю слияния, если позиция ввода изменяется иначе, чем ожидалось для удаления или ввода 1 символа, и если пользователь переключается между удалением символов и набором символов.

Я не заморачивался ни с таймером, ни с максимальным количеством символов при наборе текста.

0

Другие решения

Других решений пока нет …