Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Flake от Апрель 07, 2009, 12:35



Название: Делегат для колонок дочерних элементов.
Отправлено: Flake от Апрель 07, 2009, 12:35
Здравствуйте.

В общем код:
Код
C++ (Qt)
treeView->setItemDelegateForColumn( 2, sysMessDlg );

Таким образом делегат есть у всех 2ых колонок. Но он должен быть только у дочерних. Как в таком случае назначить делегат?


Название: Re: Делегат для колонок дочерних элементов.
Отправлено: lit-uriy от Апрель 07, 2009, 12:49
я думаю только в рукопашную, каждому элементу индивидуально.


Название: Re: Делегат для колонок дочерних элементов.
Отправлено: Flake от Апрель 07, 2009, 13:31
У меня QStandardItem'ы, как к ним делегата назначить?

В общем у меня модель(QStandardItemModel) которая привязана к QTreeView. Все элементы QStandardItem.


Название: Re: Делегат для колонок дочерних элементов.
Отправлено: Rcus от Апрель 07, 2009, 13:48
А может стоит с другой стороны к проблеме подойти и анализировать индекс при обращении в вашем классе делегата?


Название: Re: Делегат для колонок дочерних элементов.
Отправлено: Flake от Апрель 07, 2009, 13:52
Да, есть такой вариант.

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

При обращении к классу делегату надо будет как-то идентифицировать какое это поле - родительское/дочернее. Тогда надо в элементе хранить флаг под Qt::UserRole? Я всё правильно понимаю?


Название: Re: Делегат для колонок дочерних элементов.
Отправлено: EhTemka от Апрель 07, 2009, 15:20
QModelIndex::parent() ?

Простая проверка на валидность :

Код
C++ (Qt)
...
 
  if (index.parent().isValid())
 {
      paintChild(index, ...);
 }
  else
 {
      paintParent(index, ...)
 }
...
 

Конечно если у тебя всего 2 уровня. Но даже если больше можно просто усложнить немного эту схему


Название: Re: Делегат для колонок дочерних элементов.
Отправлено: Flake от Апрель 08, 2009, 09:33
Спасибо.

Я реализовал всё своим методом с флагом.

Идея с валидацией родителя хорошее решение, но вот вопрос: если этот делегат ещё используется для родительских элементов в других моделях у которых нет дочерних элементов. Как тогда быть?


Название: Re: Делегат для колонок дочерних элементов.
Отправлено: EhTemka от Апрель 08, 2009, 14:49
В таком случае у тебя всегда будет вызаватся paintParent(index, ...), собственно , то что тебе нужно, я так понимаю