Qtreeview,在选择一行时调整一行

时间:2010-10-11 19:41:07

标签: qt resize row qtreeview

我正在使用Qt 4.7.0,一个包含多个列的Qtreeview。

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

代表们是否足够这样做?

我使用QTableView进行了一些操作:

m_pMyTableView->verticalHeader()->setResizeMode(QHeaderView::Interactive);
...
QSize AbstractItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;

它正在使用这个tableview,但我无法看到我将如何在QTreeview上执行此操作,因为,首先,它没有任何垂直标题...

有人可以点赞我的道路吗?

1 个答案:

答案 0 :(得分:1)

除了在uniformRowHeights中设置QTreeView,我还会尝试。

有几种方法可以做到这一点,我喜欢使用Qt的信号/插槽,因此我们将通过QAbstractItemModel上的自定义QTreeView更改高度。此自定义模型将与selectionChanged的{​​{1}}信号QItemSelectionModel相关联。示例代码/代码段使用单选模式,但您可以轻松更改它以处理多个选定的行。

步骤1 - 使用选择槽创建自定义模型

创建派生自QTreeView的自定义模型类,并确保创建一个插槽,例如:

QAbstractItemModel

在模型类中添加以下代码段/方法。

Q_SLOTS:
    void onSelectionChanged( const QItemSelection&, const QItemSelection& );

第2步 - 将选择更改连接到您的模型

在初始化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 ); } ... } 内部创建自定义模型并执行以下操作:

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,但我再次使用信号/插槽并将选择保存在模型中。

希望这有帮助。