Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Модель/Представление _ QStyledItemDelegate не отображает данные модели в QTreeView

Автор: ivan 21.10.2015, 10:11

Мне необходимо поменять редактор для определенных элементов в TreeView. Понаследовался от QStyledItemDelegate, не переопределяя метод paint(). Установил делегат для TreeView. Перестали отображаться данные модели. Смотрю отладчиком - в модели данные есть. Переопределил метод paint() в делегате.

void PlaceChooseDelegate::paint(QPainter *painter,
                                const QStyleOptionViewItem &option,
                                const QModelIndex &index) const
{
  QStyledItemDelegate::paint(painter,option,index);
}

Смотрю отладчиком - метод не вызывается вообще. В чем может быть причина?

Автор: ViGOur 21.10.2015, 11:30

Цитата
Ожидается, что делегаты способны самостоятельно отрисовывать свое содержимое, реализовав функции paint() и sizeHint(). Однако, простые, основанные на виджетах, делегаты могут быть созданы как подкласс QItemDelegate вместо QAbstractItemDelegate, и получить преимущества реализации этих функций по умолчанию.
http://doc.crossplatform.ru/qt/4.5.0/model-view-delegate.html

paint должен вызываться, посмотри в отладчике сам объект делегата создаётся?

Автор: ivan 21.10.2015, 13:55

Уже разобрался. Делегат создавался в конструкторе формы на стеке. При выходе из функции он, разумеется, разрушался. Создал объект в куче - и проблема ушла. В общем, нужно больше спать. Спасибо за помощь.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)