提问人:Del 提问时间:9/15/2023 更新时间:9/15/2023 访问量:29
PYQT6 QGraphicsView 和事件过滤器未触发 [重复]
PYQT6 QGraphicsView and event filter not firing [duplicate]
问:
有人可以告诉我以下代码有什么问题,我想通过QGraphicsView项目上的事件过滤器传递鼠标点击。我读到事件过滤器应该安装到视口中,所以在这段代码的情况下,这将是self._scene变量。但是,在我的示例中,事件过滤器被忽略,并且每次都会触发 mousePressEvent 事件而不会被截获。
任何帮助都非常欢迎,感谢您的阅读。
from PyQt6 import QtWidgets
from PyQt6.QtCore import QEvent, Qt
class display(QtWidgets.QGraphicsView):
def __init__(self, parent):
super(display, self).__init__(parent)
self._scene = QtWidgets.QGraphicsScene(self)
self.setScene(self._scene)
self._scene.installEventFilter(self)
def eventFilter(self, QObject, event):
if event.type() == QEvent.Type.MouseButtonPress:
if event.button() == Qt.MouseButton.RightButton:
print("Right button intercepted")
if event.button() == Qt.MouseButton.LeftButton:
print("left button intercepted")
return True
def mousePressEvent(self, event):
print("I clicked the mouse ")
super(display, self).mousePressEvent(event)
class Window(QtWidgets.QWidget):
def __init__(self):
super(Window, self).__init__()
self.viewer = display(self) # Call class
VBlayout = QtWidgets.QVBoxLayout(self)
VBlayout.addWidget(self.viewer)
self.setLayout(VBlayout)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 800, 600)
window.show()
sys.exit(app.exec())
答:
1赞
Del
9/15/2023
#1
答案是QEvent.Type.GraphicsSceneMousePress,而不是QEvent.Type.MouseButtonPress:希望它能帮助到其他人
评论