Наряду с установкой uniformRowHeights
в вашем QTreeView
, вот что я бы попробовал.
Есть несколько способов сделать это, мне нравится использовать сигналы / слоты Qt, поэтому мы собираемся изменить высоту с помощью пользовательского QAbstractItemModel
на QTreeView
. Эта пользовательская модель будет подключена к сигналу selectionChanged
от QItemSelectionModel
вашего QTreeView
. Пример кода / фрагментов работает с режимом одиночного выбора, но вы можете легко изменить его для обработки нескольких выбранных строк.
Шаг 1 - Создание пользовательской модели со слотом выбора
Создайте пользовательский класс модели, производный от QAbstractItemModel
, и убедитесь, что вы создали слот, например:
Q_SLOTS:
void onSelectionChanged( const QItemSelection&, const QItemSelection& );
Внутри вашего модельного класса добавьте следующие фрагменты / методы.
void MyModelClass::onSelectionChanged( const QItemSelection& selected,
const QItemSelection& deselected )
{
if( !selected.empty() )
{
// Save the index within the class.
m_selectedIndex = selected.first();
Q_EMIT dataChanged( m_selectedIndex, m_selectedIndex );
}
}
QVariant MyModelClass::data( const QModelIndex& index, int role ) const
{
// Use the selected index received from the selection model.
if( m_selectedIndex.isValid() &&
index == m_selectedIndex &&
role == Qt::SizeHintRole )
{
// Return our custom size!
return QSize( 50, 50 );
}
...
}
Шаг 2. Подключение изменений выбора к вашей модели
Внутри инициализации вашего QTreeView
создайте собственную модель и сделайте следующее:
MyTreeView::MyTreeView( QWidget* parent ) : QWidget( parent )
{
...
MyModelClass* model = new MyModelClass();
setModel( model );
setSelectionMode( QAbstractItemView::SingleSelection );
setSelectionBehavior( QAbstractItemView::SelectRows );
connect
(
selectionModel(),
SIGNAL( selectionChanged(const QItemSelection&, const QItemSelection&) ),
model,
SLOT( onSelectionChanged(const QItemSelection&, const QItemSelection&) )
);
}
Я уверен, что есть несколько способов сделать это, то есть передать QItemSelectionModel
непосредственно на QAbstractItemModel
, но опять же я предпочитаю использовать сигналы / слоты и сохранять выбор в модели.
Надеюсь, это поможет.