Russian Qt Forum

Qt => Общие вопросы => Тема начата: XXCoder от Ноябрь 18, 2006, 00:47



Название: QUndoCommand, QUndoStack, ets.
Отправлено: XXCoder от Ноябрь 18, 2006, 00:47
Кто-нибудь пробовал использовать классы QUndoCommand, QUndoStack & ets. при работе с графическими объектами? Поделитесь исходниками пожалуста! 4.2.1))   :oops:


Название: QUndoCommand, QUndoStack, ets.
Отправлено: Tonal от Ноябрь 18, 2006, 10:28
А в чём проблем-то?


Название: QUndoCommand, QUndoStack, ets.
Отправлено: XXCoder от Ноябрь 18, 2006, 12:53
непонятно как добавлять объект... тот который рисуется в паинт ивенте... это все равно что писать заново получается...


Название: QUndoCommand, QUndoStack, ets.
Отправлено: Tonal от Ноябрь 20, 2006, 10:51
Для реализации отката обычно используются 2 схемы запись комманд и запись состояний.
В первом случае мы запоминаем действие и его аргументы,
во втором - состояние системы до начала действия.

Первая схема обычно бывает менее требовательна к памяти,
просто реализуются сохранение/восстановление истории и распространение между экземплярами приложения и/или сеансами.
Минусы: Для действия может не существовать обратного, тормоза с групповой отменой.

Вторая схема всегда позволяет быстро откатиться к любой выбранной точке.
Минусы: Обычно требуется много памяти, не всегда очевидна связь с действиями, плохо поддаётся сохранению/распространению.

В текстовых процессорах обычно применяется первая.
В графических редакторах - вторая.


Название: QUndoCommand, QUndoStack, ets.
Отправлено: XXCoder от Ноябрь 20, 2006, 11:08
ага, те данные классы не подойдут для работы с графикой...  там работа как раз с командами как я поняла...


Название: QUndoCommand, QUndoStack, ets.
Отправлено: Tonal от Ноябрь 20, 2006, 11:40
Если все команды в графике обратимые - можно использовать запись комманд.

Можно, так же использовать гибридный вариант - в команде запоминается исходное состояние и действие с аргументами над ним. Можно запоминать не всё состояние, а только то подмножество, на которое воздействует комманда.
В этом случае Qt-шные классы довольно хороше подходят.


Название: QUndoCommand, QUndoStack, ets.
Отправлено: XXCoder от Ноябрь 21, 2006, 12:33
но они же в паин ивенте!!! из него запоминать... ??? ладно) попробую))) пасибо!!!


Название: QUndoCommand, QUndoStack, ets.
Отправлено: Tonal от Ноябрь 21, 2006, 12:46
Кто в "паин ивенте"?
Ты их там создаёшь?