如何挂钩 QGraphicsView 中的鼠标点击?

How to hook on mouseclick in a QGraphicsView?

我对 PyQt 有点陌生。我有一个 python PyQt5 代码,带有一个由设计器创建的简单对话框 window,在对话框中我有一个 QGraphicsView。在此视图中,QGraphicsScene 中只有一张图像。

现在我想 运行 当用户在图像上单击鼠标时的代码,但我不知道该怎么做。

class Ui_Dialog(object):
def setupUi(self, Dialog):
...
        self.gv_1_H = QtWidgets.QGraphicsView(self.verticalLayoutWidget_2)

...
        scene = QtWidgets.QGraphicsScene()
        pixmap = QtGui.QPixmap("ui/d0.png")
        scene.addPixmap(pixmap)
        self.gv_1_H.setScene(scene)
        self.gv_1_H.setSizeAdjustPolicy( QtWidgets.QAbstractScrollArea.AdjustToContents )
...

网上找了一个小时也没找到提示...

有什么提示吗? 谢谢

Qt 小部件的鼠标事件是受保护的函数,您需要将要对其作出反应的小部件子类化并覆盖这些函数。

为了避免子类化,您可以选择安装一个 eventFilter 来对它们做出反应,但我不建议在这种情况下使用它。

class MyScene(QtWidgets.QGraphicsScene):
    def __init__(self):
        super(MyScene, self).__init__()
        self.pixmapItem = self.addPixmap(QtGui.QPixmap("ui/d0.png"))

    def mousePressEvent(self, event):
        if event.scenePos() in self.pixmapItem.sceneBoundingRect():
            print('image clicked!')
        else:
            super(MyScene, self).mousePressEvent(event)

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        # ...
        scene = MyScene()
        self.gv_1_H.setScene(scene)