如何在QGraphicsView中获取鼠标释放坐标

How to get mouse release coordinates in QGraphicsView

大家好,我是 Qt 和 pyside 的新手。我试图在 QGraphicsView 实例中获取鼠标的坐标。我试图重新实现我的 mouseReleaseEvent 但想知道我将如何实际使用这个重新实现的函数。

在主窗口中class:

self.tScn = QtGui.QGraphicsScene()
self.graphicsView_2 = QtGui.QGraphicsView(self.centralwidget, self.tScn)

在 MainConsumer class(派生自 MainWindow:

def pointSelection(self):
    pos = self.tScn.mouseReleaseEvent(QMouseEvent)
    print(pos)

def mouseReleaseEvent(self, QMouseEvent):
    pos = QMouseEvent.lastScenePos()
    print(pos)
    return pos

python 给我这个警告:

AttributeError: 'PySide.QtGui.QMouseEvent' object has no attribute 'lastScenePos'

我尝试了几种不同的顺序和结构,但没有任何效果,现在我对 PySide.QtGui.QGraphicsScene.mouseReleaseEvent(event)PySide.QtGui.QGraphicsSceneMouseEvent.lastScenePos()class PySide.QtGui.QGraphicsSceneMouseEvent([type=None])QtCore.QEvent.GraphicsSceneMouseRelease 之间的关系感到非常困惑有人帮帮我吗?

谢谢!

创建一个 class 继承自 QGraphicsScene 并具有这样的信号

class MyGraphicsScene(QtGui.QGraphicsScene):
    signalMousePos = QtCore.pyqtSignal(QtCore.QPointF)
    def __init__(self, parent):
        super(MyGraphicsScene, self).__init__(parent)

然后覆盖这个新 class

中的 mouseRelease 事件
def mouseReleaseEvent(QGraphicsSceneMouseEvent):
    pos = QGrapihcsSceneMouseEvent.lastScenePos()
    self.signalMousePos.emit(pos)

然后在您的 MainConsumer class 中替换

self.tScn = QtGui.QGraphicsScene()

self.tScn = MyQGraphicsScene()
self.tScn.signalMousePos.connect(self.pointSelection)

pointSelection 变为

def pointSelection(self, pos)
    #Whatever you want to do with the position coordinates

并且不再需要 MainConsumer 中的 mouseReleaseEvent