是否可以在 QTreeWidgetItem 上禁用浅蓝色鼠标突出显示?

Is it possible to disable the light-blue mouse over highlighting on a QTreeWidgetItem?

我有一个 QTreeWidget 并且需要禁用鼠标在 childItems 上突出显示而不是单击选择。这里的要点是,我需要为每个项目设置它,因为有些是可选的。我正在考虑 QTreeWidget::itemEntered 信号来检查该项目是否应该突出显示,但我无法让它工作,因为描述说

QTreeWidget mouse tracking needs to be enabled for this feature to work.

我不知道怎么办。

所以我的问题是:如何启用鼠标跟踪?

是否有更简单的方法来禁用突出显示?

只需调用 setMouseTracking() 即可为特定小部件启用鼠标跟踪。

我 运行 解决了这个问题(我知道这是一个旧的 post,但我也可以 post 我的解决方案,因为它对其他人有用)。

我无法在启用鼠标跟踪的同时正确禁用鼠标反馈,但我可以使此反馈不可见。我正在使用 qss 样式表,并将鼠标悬停反馈颜色设置为 t运行sparent:

MyTreeWidget::item:hover {
    background-color: transparent
}

它对我有用。可悲的是,它使反馈始终不可见,而不是允许将其关闭和打开。

所以作为下一步,当我需要它时,我通过使用委托并覆盖 paint 函数来实现我自己的反馈。 QTreeView 覆盖 mouseMoveEvent 并将鼠标坐标发送给委托。这样,委托可以调整它在 paint 中所做的事情以适应这个位置。它感觉很重,有点脏,但它确实有效。委托还应该允许对不同的项目有不同的行为。

PS:如果您使用委托,在大多数情况下,无需更改 qss 就足够了。在我的例子中不是,因为我在覆盖的 paint 方法中调用了 QStyledItemDelegate::paint,所以我继承了一些不需要的行为。