Russian Qt Forum

Qt => Вопросы новичков => Тема начата: CJ1 от Июля 20, 2012, 17:23



Название: QTablewidget + ctrl-z
Отправлено: CJ1 от Июля 20, 2012, 17:23
Как сделать в QTableWidget чтоб работало назад все изменения


Название: Re: QTablewidget + ctrl-z
Отправлено: mutineer от Июля 20, 2012, 17:26
Запоминать все изменения, а при нажатии ctrl+z откатывать по очереди


Название: Re: QTablewidget + ctrl-z
Отправлено: CJ1 от Июля 20, 2012, 17:28
Хм.... не представляю как можно записать все изменения.... удаления стобцов и строк, затем заного их создания, про том все  данные нужно отправить в сеть


Название: Re: QTablewidget + ctrl-z
Отправлено: mutineer от Июля 20, 2012, 17:30
Ну да, это не очень тривиальная задача


Название: Re: QTablewidget + ctrl-z
Отправлено: V1KT0P от Июля 20, 2012, 17:30
Хм.... не представляю как можно записать все изменения.... удаления стобцов и строк, затем заного их создания, про том все  данные нужно отправить в сеть
Храни diff-ы между прошлым и следующим состояниями.


Название: Re: QTablewidget + ctrl-z
Отправлено: CJ1 от Июля 20, 2012, 17:43
Жесть...... Ну придется мудрить ченить!


Название: Re: QTablewidget + ctrl-z
Отправлено: CJ1 от Июля 20, 2012, 18:16
Вроде уже в голове есть идеи..... но , а есть хоть малейшый пример подобного! Данные же все таки динамические?


Название: Re: QTablewidget + ctrl-z
Отправлено: V1KT0P от Июля 20, 2012, 18:35
Вроде уже в голове есть идеи..... но , а есть хоть малейшый пример подобного! Данные же все таки динамические?
Дык я же сказал, что самый простой это хранить diff-ы. Например есть таблица на 3 столбца и 10 строк. Во 2-м столбце 5 строки было "Оплатить" а стало "Оплачено", значит создаем diff в котором сказано что для возвращения на предыдущее состояние необходимо изменить ячейку 2-го столбца 5-й строки на "Оплатить".

Более подробно, более совершенные способы можешь посмотреть в исходника Open Source объектов. Например Calc, Writer из OpenOffice. Если не осилишь, то глянь программы по проще.


Название: Re: QTablewidget + ctrl-z
Отправлено: Fat-Zer от Июля 20, 2012, 18:36
Вроде уже в голове есть идеи..... но , а есть хоть малейшый пример подобного! Данные же все таки динамические?
если ищешь как это сделать, чтобы было Ъ, то читай про паттерн «команда»...
соответственно разделяешь таблицу и модель и делаешь так, чтобы любое взаимодействие таблицы и модели шло через специальный объект-команду с методами «Выполнить(модель)» и «Отменить(Модель)»...
если таблица небольшая, то можно запоминать каждый раз её всю, тогда можно использовать паттерн мементо (не помню как по нашему)

ЗЫ: в помощь книжечка «Приемы объектно-ориентированного программирования» Э. Гамма Р. Хелм
ЗЗЫ: задача очень распространённая, но совсем не тривиальная и не простая...


Название: Re: QTablewidget + ctrl-z
Отправлено: CJ1 от Июля 20, 2012, 18:41
таблица динамическая..... и очень огромная