QTreeView пользовательская высота строки отдельных строк

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

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

Qt версии 4.7.4, обновление до 5 невозможно.

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

1 ответ

Решение

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

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);
Другие вопросы по тегам