如何配置QTreeView以在使用箭头键移动时保留多个选择

时间:2012-01-19 21:05:41

标签: c++ qt user-interface

我正在使用 QTreeView selectionMode 设置为 ExtendedSelection 。每当使用箭头键更改当前项目(焦点)时,我想更改清除所选项目的默认行为。

是否可以进行设置,以便当我使用箭头键进行导航时,选择保持且只有当前项目(焦点)更改(与使用时的工作方式相同)按Ctrl +箭头)。我基本上需要交换(箭头与Ctrl +箭头)的行为,或者只是按Ctrl +箭头般的行为,即使没有按下Ctrl键。

这可能吗?

谢谢, FIPS

1 个答案:

答案 0 :(得分:2)

这是一个很好的问题,因为您需要使用的功能有点模糊。您将不得不继承QTreeView并覆盖keyPressEvent()函数。这应该让你走上正轨:

class MyTree : public QTreeWidget
{
    Q_OBJECT

    protected:

        void keyPressEvent( QKeyEvent *event )
        {   
            if( event->key() == Qt::Key_Up )
            {   
                selectionModel()->setCurrentIndex( indexAbove(currentIndex()), QItemSelectionModel::NoUpdate );
            }   
            else if( event->key() == Qt::Key_Down )
            {   
                selectionModel()->setCurrentIndex( indexBelow(currentIndex()), QItemSelectionModel::NoUpdate );
            }   
            else
            {   
                QTreeWidget::keyPressEvent( event );
            }   
        }   
};