我想要做的是更改 QLable 的文本,每次我将鼠标悬停在我的 QTableWidget 的水平标题上时。我怎样才能做到这一点?每次我通过一个新的标题时,我都需要一个信号和标题的索引。希望你们中的某个人有一个想法。必须有一个功能,因为如果您将鼠标悬停在标题上,标题的背景会发生变化。
问问题
4995 次
1 回答
2
使用QObject.installEventFilter()在 HorizontalHeader()上安装事件过滤器:
class HeaderViewFilter(QObject):
# ...
def eventFilter(self, object, event):
if event.type() == QEvent.HoverEvent:
pass # do something useful
# you could emit a signal here if you wanted
self. filter = HeaderViewFilter()
horizontalHeader().installEventFilter(self.filter)
self.filter
到位后,您将收到必要事件的通知,并可以做出相应的响应。
更新:看起来 HoverEvent 并不是我们所需要的。为了获得悬停事件,您需要使用 setAttribute 调用Qt::WA_Hover
。从有关此属性的文档中:
当鼠标进入或离开小部件时,强制 Qt 生成绘制事件。此功能通常在实现自定义样式时使用;有关详细信息,请参阅样式示例。
所以是的,它仅在您进入或离开小部件时才会生成事件。
由于所有行或所有列都使用相同的标题,我们实际上想知道鼠标在小部件中的位置。这是一些应该处理鼠标移动的新代码:
class HeaderViewFilter(QObject):
def __init__(self, parent, header, *args):
super(HeaderViewFilter, self).__init__(parent, *args)
self.header = header
def eventFilter(self, object, event):
if event.type() == QEvent.MouseMove:
logicalIndex = self.header.logicalIndexAt(event.pos())
# you could emit a signal here if you wanted
self.filter = HeaderViewFilter()
self.horizontalHeader = yourView.horizontalHeader()
self.horizontalHeader.setMouseTracking(1)
self.horizontalHeader.installEventFilter(self.filter)
正如您在上面看到的,主要概念仍然适用。我们要么需要一个事件过滤器以便我们可以监视事件,要么我们需要子类QHeaderView
化以便它为我们提供必要的信息。
于 2010-08-25T17:10:42.987 回答