我正在尝试QTreeWidget
用于文件浏览器。我希望有单独的选择概念(应用操作的项目)和光标(可用于扩展选择)。就像在 Total Commander 中一样:红色是选择,移动光标不会影响选择,除非按下 Shift。
有没有什么巧妙的方法可以用 QTreeWidget 实现这个?或者不整洁但至少可以工作并且不需要手动处理一半的事件?
我正在尝试QTreeWidget
用于文件浏览器。我希望有单独的选择概念(应用操作的项目)和光标(可用于扩展选择)。就像在 Total Commander 中一样:红色是选择,移动光标不会影响选择,除非按下 Shift。
有没有什么巧妙的方法可以用 QTreeWidget 实现这个?或者不整洁但至少可以工作并且不需要手动处理一半的事件?
如果您将小部件的选择模式设置为,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);
}
现在,当用户按下Up或Down键时,当前项目已更改,选择保持不变。我已经测试过这个解决方案。
请注意,默认情况下还有 pageup、pagedown、home、end(可能还有其他)键可以更改选择。您可能还需要处理这些事件。