我有一个QTreeWidget,需要在childItems上禁用鼠标而不是单击选择。这里的要点是,我需要为每个项目设置这个,因为有些是可选择的。我正在考虑QTreeWidget::itemEntered
信号来检查项目是否应该突出显示但是我无法使其工作,因为描述说明了
需要为此功能启用QTreeWidget鼠标跟踪 工作
我无法弄清楚如何。
所以我的问题是:如何启用鼠标跟踪?
是否有更简单的方法可以禁用突出显示?
答案 0 :(得分:1)
只需调用setMouseTracking()即可为特定小部件启用鼠标跟踪。
答案 1 :(得分:0)
我遇到了这个问题(我知道这是一个老帖子,但我也可以发布我的解决方案,因为它对其他人有用。)
在启用鼠标跟踪的同时无法正确禁用鼠标反馈,但我可以使此反馈不可见。我正在使用qss样式表,并将鼠标悬停反馈颜色设置为透明:
MyTreeWidget::item:hover {
background-color: transparent
}
它为我做了伎俩。可悲的是,它始终使反馈不可见,而不是允许将其关闭和打开。
因此,作为下一步,当我需要它时,我通过使用委托并覆盖paint
函数来实现我自己的反馈。
QTreeView覆盖mouseMoveEvent
并将鼠标坐标发送给代理。这样,代表可以调整它在paint
中对此位置的作用。它感觉很重,有点脏,但它的工作原理。代表还应允许对不同的项目采取不同的行为。
PS:如果您使用的是委托,在大多数情况下,如果没有qss更改就足够了。在我的情况下,它不是,因为我在覆盖的QStyledItemDelegate::paint
方法中调用paint
,所以我继承了一些不需要的行为。