QTreeWidget:将光标与选择分开

时间:2013-08-09 17:34:49

标签: qt qt4 qt5 qtreewidget

我正在尝试将QTreeWidget用于文件浏览器。我想要有单独的选择概念(应用操作的项目)和游标(可用于扩展选择)。与Total Commander中一样:选择红色,移动光标不会影响选择,除非按下Shift键。

enter image description here

有没有任何巧妙的方法来实现QTreeWidget?或者不整洁,但至少工作,不需要手动处理一半事件?

1 个答案:

答案 0 :(得分:2)

如果您将窗口小部件的选择模式设置为QAbstractItemView::ExtendedSelection,则用户将能够使用按下 Ctrl 的箭头键在不更改选择的情况下浏览项目。如果要更改此行为,则应重新实现keyPressEvent,如下所示:

void MyWidget::keyPressEvent(QKeyEvent *event) {
  if (event->key() == Qt::Key_Down ||
      event->key() == Qt::Key_Up) {
    event->setModifiers(Qt::ControlModifier);
  }
  QTreeWidget::keyPressEvent(event);
}

现在,当用户按向上向下键时,当前项目会更改,选择保持不变。我已经测试了这个解决方案。

请注意,默认情况下还有更改选择的pageup,pagedown,home,end(可能是其他)键。您可能还需要处理这些事件。