Russian Qt Forum

Qt => Вопросы новичков => Тема начата: phpCoder от Январь 01, 2015, 16:03



Название: Как отследить изменение, сделанное делегатом?
Отправлено: phpCoder от Январь 01, 2015, 16:03
Как отследить изменение в ячейке таблицы, сделанное делегатом?
Например делегат - это комбобокс. Выбрал какое-то значение, нажал enter. Дальше, как таблице узнать, что делегат что-то сделал.
Сигнал itemChanged не годится. Он вызывается всегда, когда я вставляю данные в таблицу.


Название: Re: Как отследить изменение, сделанное делегатом?
Отправлено: Johnik от Январь 01, 2015, 21:24
Как отследить изменение в ячейке таблицы, сделанное делегатом?
Написать правильно делегат.
Например делегат - это комбобокс. Выбрал какое-то значение, нажал enter. Дальше, как таблице узнать, что делегат что-то сделал.
Сигнал itemChanged не годится. Он вызывается всегда, когда я вставляю данные в таблицу.
Для делегата, который реализует виджет редактирования (выбора, в вашем случае), как минимум надо реализовать методы: createEditor, setEditorData, setModelData.

P.S. Что вы подразумеваете под "делегатом"?


Название: Re: Как отследить изменение, сделанное делегатом?
Отправлено: phpCoder от Январь 01, 2015, 21:50
Да это понятно. Давно сделано.
Дальше-то как? Есть виджет с таблицей, которую редактирую. В этом виджете как узнать, что делегат завершил редактирование? И какие новые данные были вставлены в ячейку?


Название: Re: Как отследить изменение, сделанное делегатом?
Отправлено: Johnik от Январь 01, 2015, 22:08
В этом виджете как узнать, что делегат завершил редактирование? И какие новые данные были вставлены в ячейку?
Изменения данных происходит в виджете, и делегат должен ловить эти изменения и вызывать сигнал commitData(), и closeEditor(), при необходимости. Запись же изменений в модель происходит в методе делегата: setModelData.
И какие новые данные были вставлены в ячейку?
Об изменении данных должна сообщать модель.