Qtreeview,在显示';他被选中了
我使用的是Qt4.7.0,一个具有多列的Qtreeview 我想要做的是“简单”:我想要一条线,当它被选中时,增加它的高度 代表们是否足够做到这一点 我已经用QTableView看了一些东西:Qtreeview,在显示';他被选中了,qt,resize,row,qtreeview,Qt,Resize,Row,Qtreeview,我使用的是Qt4.7.0,一个具有多列的Qtreeview 我想要做的是“简单”:我想要一条线,当它被选中时,增加它的高度 代表们是否足够做到这一点 我已经用QTableView看了一些东西: m_pMyTableView->verticalHeader()->setResizeMode(QHeaderView::Interactive); ... QSize AbstractItemDelegate::sizeHint(const QStyleOptionViewItem &
m_pMyTableView->verticalHeader()->setResizeMode(QHeaderView::Interactive);
...
QSize AbstractItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
它正在使用这个tableview,但我不知道如何在QTreeview上执行此操作,因为首先,它没有任何垂直标题
有人能照亮我的路径吗?在你的
QTreeView
中设置uniformRowHeights
关闭,下面是我要尝试的
有几种方法可以做到这一点,我喜欢使用Qt的信号/插槽,因此我们将通过QTreeView
上的自定义qabstractemmodel
来更改高度。此自定义模型将连接到QTreeView
的QItemSelectionModel
的信号selectionChanged
。示例代码/代码段使用单一选择模式,但您可以轻松地更改它以处理多个选定行
步骤1-使用选择窗创建自定义模型
创建从qabstractemmodel
派生的自定义模型类,并确保创建一个插槽,例如:
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
交给您的qabstractemmodel
,但我还是更喜欢使用信号/插槽并将选择保存在模型中
希望这能有所帮助。记得再次检查您的树视图,并确保uniformRowHeights选项为false。否则,它很可能只要求一个索引的大小,并将其用于所有索引。(我没有其他见解。)嗯,嗯。。。谢谢你的回答!