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

Posted

技术标签:

【中文标题】如何配置 QTreeView 以在使用箭头键移动时保留多项选择【英文标题】:How to configure QTreeView to preserve multiple selection when moving using the arrow keys 【发布时间】:2012-01-19 21:05:40 【问题描述】:

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

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

这可能吗?

谢谢, FipS

【问题讨论】:

【参考方案1】:

这是一个很好的问题,因为您需要使用的功能有点晦涩难懂。您将不得不继承 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 );
               
           
;

【讨论】:

嗨,克里斯,这正是我想要的!我需要修复 PageUp、PageDown 和鼠标单击等其余控件以模仿完整的 Ctrl 行为。但是您的代码非常适合箭头键!再次感谢 FipS

以上是关于如何配置 QTreeView 以在使用箭头键移动时保留多项选择的主要内容,如果未能解决你的问题,请参考以下文章

QTreeView - 如何判断拖放事件是重新排序还是父母之间的移动?

Qt QTreeView clicked函数如何区分左右键

我无法绑定箭头键事件

如何在光滑的滑块中创建自定义箭头以在悬停时更改图像?

使用箭头键滚动的 Tkinter 列表框

到达下拉列表时单击iphone移动箭头键,应显示下拉列表内容