Qtreeview,在显示';他被选中了

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 &

我使用的是Qt4.7.0,一个具有多列的Qtreeview

我想要做的是“简单”:我想要一条线,当它被选中时,增加它的高度

代表们是否足够做到这一点

我已经用QTableView看了一些东西:

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。否则,它很可能只要求一个索引的大小,并将其用于所有索引。(我没有其他见解。)嗯,嗯。。。谢谢你的回答!