Установите фильтр событий для горизонтального заголовка () с помощью QObject.installEventFilter () :
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
, чтобы он предоставил нам необходимую информацию.