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

时间:2015-06-05 07:44:02

标签: c++ qt signals qtreewidget

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

  

需要为此功能启用QTreeWidget鼠标跟踪   工作

我无法弄清楚如何。

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我遇到了这个问题(我知道这是一个老帖子,但我也可以发布我的解决方案,因为它对其他人有用。)

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

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

它为我做了伎俩。可悲的是,它始终使反馈不可见,而不是允许将其关闭和打开。

因此,作为下一步,当我需要它时,我通过使用委托并覆盖paint函数来实现我自己的反馈。 QTreeView覆盖mouseMoveEvent并将鼠标坐标发送给代理。这样,代表可以调整它在paint中对此位置的作用。它感觉很重,有点脏,但它的工作原理。代表还应允许对不同的项目采取不同的行为。

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