Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Jokerochek от Июль 22, 2009, 12:14



Название: Пара вопросов по делегатам
Отправлено: Jokerochek от Июль 22, 2009, 12:14
1) Можно ли задавать конкретного делегата не только отдельной строке и колонке, но и отдельной ячейке?

2) Столкнулся с проблемой - при назначении собственного делегата не вызываются сигналы itemActivated, при изменении значения в модели. Можно ли связать этот сигнал с сигналом делегата commitData или closeEditor?


Название: Re: Пара вопросов по делегатам
Отправлено: spectre71 от Июль 22, 2009, 13:11
1) Можно ли задавать конкретного делегата не только отдельной строке и колонке, но и отдельной ячейке?

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


Название: Re: Пара вопросов по делегатам
Отправлено: denka от Июль 22, 2009, 13:24
По 1 нет нельзя

По 2 если имееться ввиду сигнал от группы классов Q*Widget то он и не должен испускаться при изменении данных


Название: Re: Пара вопросов по делегатам
Отправлено: spectre71 от Июль 22, 2009, 15:00
По 1 нет нельзя

Можно, но не напрямую! Написано выше.


Название: Re: Пара вопросов по делегатам
Отправлено: Jokerochek от Июль 22, 2009, 17:50
Спасибо за ответы.
Spectre, я понял, что вы имели в виду. У этого способа есть один сильный недостаток - делегат, скорее всего, будет завязан на данной конкретной модели.
Хотя это тоже можно обойти, если создать делегат, который будет являться прослойкой:
-повесить его через setItemDelegate, а внутри него определить какие делегаты будут вызываться, в зависимости от индекса текущего элемента.


Название: Re: Пара вопросов по делегатам
Отправлено: denka от Июль 22, 2009, 22:22
По 1 нет нельзя

Можно, но не напрямую! Написано выше.

Я отвечал конкретно на конкретный вопрос. Ответ - нельзя. Читай что спрашивалось в начале топика:
1) Можно ли задавать конкретного делегата не только отдельной строке и колонке, но и отдельной ячейке?

Для вью можно задать один делегат для всех итемов или же для конкретной строки или столбца. Для конкретного итема нельзя.

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

З.ы. если я не прав прошу привести код где для 3-4 конкретных элементов QTableView будут установлены разные делегаты