2015-01-09 5 views
0

Возможно ли переопределить высоту ряда отдельных строк в пределах QTreeView?QTreeView настраиваемая высота строк для отдельных строк

У меня есть обычай QTreeView, обычай QAbstractItemModel и обычай QStyledItemDelegate, но мне кажется, что все sizeHint методы либо вызывается только один раз (на начальном этапе) или не являются виртуальными в базовых классах.

Qt Версия 4.7.4, без модернизации до 5 возможных.

Любая помощь приветствуется.

+1

Существует SizeHintRole, попытаться вернуть QSize (Int, Int) внутри данных() метод Когда эта роль просил. – Chernobyl

+0

То же поведение: метод data() вызывается только один раз с помощью SetHintRole! – mefiX

+0

Итак, если вам нужны данные звонков, чтобы обновить что-то, тогда нормальная практика заключается в том, чтобы испускать сигнал DataChanged с необходимыми QModelIndex'ами из модели, не так ли? – Chernobyl

ответ

4

Переопределите размер делегата(). Нашел пример в каком-то производственном коде. Это показано ниже. В этом примере дерево может содержать изображения. Поэтому размеры ячеек должны корректироваться для размещения изображений.

class ItemDelegate : public QItemDelegate 
{ 
    public: 
     QSize sizeHint (const QStyleOptionViewItem & option, const QModelIndex & index) const 
     { 
      const TreeItem* ti(static_cast<TreeItem*>(index.internalPointer())); 
      if(ti->pixmap()) 
       return ti->pixmap()->size(); 
      QItemDelegate::sizeHint(option,index); 
     } 
}; 

Использование:

QTreeView view; 
ItemDelegate *delegate = new ItemDelegate; 
view.setItemDelegate(delegate); 
+0

Я уже переопределял метод 'sizeHint'. Проблема в том, что этот метод вызывается только один раз для полного дерева (т. Е. Только для корня 'QModelIndex'), так что все строки имеют одинаковый размер. – mefiX

+3

@mefiX, вероятно, вы заговорщик о http://qt-project.org/doc/qt-4.8/qtreeview.html#uniformRowHeights-prop –

+1

@SaZ: Вы правы. На самом деле это, вероятно, ответ. – user2672165

Смежные вопросы