1

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

在此处输入图像描述

有没有什么巧妙的方法可以用 QTreeWidget 实现这个?或者不整洁但至少可以工作并且不需要手动处理一半的事件?

4

1 回答 1

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);
}

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

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

于 2013-08-09T19:45:12.933 回答