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