Реализация функции отмены (например, Ctrl + Z) в Qt / C ++ - PullRequest
3 голосов
/ 18 ноября 2010

Я использую Qt 4.5 и C++ в Windows XP.

В основном у меня будет пользовательский интерфейс, в который пользователь будет вводить некоторые данные.Он может перейти и изменить значения, доступные в пользовательском интерфейсе.Пользовательский интерфейс будет иметь базовые элементы Qt UI, такие как QLineEdit, QTableWidget и т. Д.,

Так что теперь, если пользователь нажимает кнопку Undo (или Ctrl + Z ) предыдущегозначение должно быть сохранено в соответствующем элементе пользовательского интерфейса.

Скажем, если есть QLineEdit с текстом 25. Теперь пользователь изменяет на 30. Теперь, нажав Отменить, старое значение 25 должно быть сохранено.

Как и функция отмены, котораяобычно доступно во многих приложениях.Есть ли способ сделать это?

Ответы [ 4 ]

7 голосов
/ 18 ноября 2010

Вы можете использовать среду отмены Qt .

5 голосов
/ 18 ноября 2010

Типичный способ реализации Undo - представлять каждое действие, выполненное пользователем, и сохранять их.Вы также хотите иметь возможность вычислять обратное значение для данного действия.

Таким образом, для вставки в текстовый буфер действие сохранит вставленный текст и место, в котором произошла вставка.Инверсия становится удалением в том же месте и с размером вставленного текста.

Когда пользователь просит приложение отменить операцию, просто посмотрите на самое последнее сохраненное действие и выполните его инверсию.Если вы теперь вместо того, чтобы удалить «потраченное» действие, запомните его, вы также можете внедрить Redo, переместившись в историю действий другим путем.как указывают другие ответы, в Qt уже есть фреймворк для реализации Undo, поэтому вы, конечно, должны сначала это исследовать.

2 голосов
/ 18 ноября 2010

Вы можете использовать Шаблон команды , чтобы реализовать отмену / повтор

1 голос
/ 19 ноября 2010

QLineEdit имеет встроенную поддержку отмены / возврата, экспортированную как открытые слоты, проверьте: http://doc.trolltech.com/4.7/qlineedit.html#undo

...