PyQt5事件过滤器对象检测

问题描述 投票:0回答:1

[我想在单击QGraphicsView小部件中的点时报告鼠标位置。

class App(QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):
        super(App, self).__init__(parent)
        self.setupUi(self)

        self.graphicsView.viewport().installEventFilter(self)
        self.graphicsView_2.viewport().installEventFilter(self)

    def eventFilter(self, a0: 'QObject', a1: 'QEvent') -> bool:
        if a0 == self.graphicsView:
            if a1.type() == QtCore.QEvent.MouseButtonPress:
                mousePosition = a1.pos()
                print(mousePosition.x(), 261 - mousePosition.y())
                return True
            return False
        elif a0 == self.graphicsView_2:
            if a1.type() == QtCore.QEvent.MouseButtonPress:
                mousePosition = a1.pos()
                print(mousePosition.x(), 261 - mousePosition.y())
                return True
            return False
        return False

我只希望它在我列出的两个QGraphicsView小部件之一上按下时报告鼠标按钮。但是,使用此当前代码,任何时候都不会触发任何事件。我假设a0从不等于我想与之进行比较的QGraphicsView小部件,所以我不确定如何在需要时触发此触发器。

python pyqt pyqt5 qgraphicsview
1个回答
1
投票

QGraphicsView继承自QGraphicsView,因此您单击的小部件不是QAbstractScrollArea,而是在其QAbstractScrollArea中。这似乎是可以理解的,因为您在QGraphicsView中安装了事件过滤器,因此“ a0”将永远不是QGraphicsView,而是其viewport()。同样,在比较对象时,最好使用“ is”。

考虑到上述,解决方法是:

viewport()

viewport()
© www.soinside.com 2019 - 2024. All rights reserved.