如何配置 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 以在使用箭头键移动时保留多项选择的主要内容,如果未能解决你的问题,请参考以下文章