我有一个QWidget
,其中包含另一个我要处理hoverEnterEvent
和hoverLeaveEvent
的(子)窗口小部件。 The documentation提到
鼠标事件移入,移出窗口小部件或在窗口小部件内时,如果窗口小部件具有
Qt::WA_Hover
属性,则会发生鼠标事件。
因此,我尝试通过设置此属性并实现相应的事件处理程序来接收悬停事件:
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
class TestWidget(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout()
layout.addWidget(TestLabel('Test 1'))
layout.addWidget(TestLabel('Test 2'))
self.setLayout(layout)
self.setAttribute(Qt.WA_Hover)
class TestLabel(QLabel):
def __init__(self, text):
super().__init__(text)
self.setAttribute(Qt.WA_Hover)
def hoverEnterEvent(self, event): # this is never invoked
print(f'{self.text()} hover enter')
def hoverLeaveEvent(self, event): # this is never invoked
print(f'{self.text()} hover leave')
def mousePressEvent(self, event):
print(f'{self.text()} mouse press')
app = QApplication([])
window = TestWidget()
window.show()
sys.exit(app.exec_())
但是似乎不起作用,没有收到悬停事件。另一方面,mousePressEvent
确实起作用。
此外,我还尝试了以下操作:
self.setMouseTracking(True)
,TestWidget
包装在QMainWindow
中(尽管这不是我想要为实际应用程序执行的操作,],>event.accept()
上实施事件处理程序(尽管据我所知,事件是从内向外传播的,因此这不是必需的。)>如何在自定义QWidget上接收悬停事件?
我有一个QWidget,其中包含另一个我要处理hoverEnterEvent和hoverLeaveEvent的(子)窗口小部件。该文档提到鼠标事件在移动鼠标光标时发生...
[Q0Cel的QWidget
会[[0]和QWidget
方法,[这些没有]],这些方法来自hoverEnterEvent
,因此您的代码不起作用。
hoverEnterEvent
方法:hoverLeaveEvent