Я использую Qt’s undo / redo framework. Я помещаю команду отмены в стек отмены. Однако функции, вызываемые при возврате команды, иногда ничего не делают, поскольку некоторые требования не выполняются. В этом случае, как позволить стеку отмены вернуться к состоянию до того, как команда будет нажата?
Я просто прочитал исходный код QUndoStack::push()
, Это вызывает повтор в первом начале. Если это так, я думаю, что мне нужно только выбросить исключение в redo()
функционировать, если ничего не сделано. Должно ли это работать?
Я не думаю, что вы можете сделать это. Когда вы помещаете команду отмены в стек, вы делаете это потому, что вносите реальные изменения в свой документ или модель данных. Как только команда нажата, стек вызовет ее redo()
метод. Таким образом, вы должны действительно проверить, выполнены ли требования, прежде чем помещать команду в стек. Не нажимайте на команды, которые на самом деле не вносят никаких изменений.
Других решений пока нет …