1

这是一个错误,我不小心解决了它,但不知道为什么会这样。我希望有人可以向我解释其背后的逻辑。

我重新实现了 QGraphicsItem 及其 mousePressEvent。通过这样做,该项目不再是可移动的。即使尝试调用QGraphicsItem.mousePressEvent(self, event)它也不起作用。只有当我重新实现 mouseMoveEvent() 和 mouseReleaseEvent() 时,它才最终起作用。

代码:

class LWResizeableItem(QtGui.QGraphicsItem):

    def __init__(self):

        super(LWResizeableItem, self).__init__()
        self.setFlag(QtGui.QGraphicsItem.ItemIsMovable)

    def mousePressEvent(self, event):
        QtGui.QGraphicsItem.mousePressEvent(self, event)
        < some code.... >

    def mouseMoveEvent(self, event):
        QtGui.QGraphicsItem.mouseMoveEvent(self, event)

    def mouseReleaseEvent(self, event):
        QtGui.QGraphicsItem.mouseReleaseEvent(self, event)
4

1 回答 1

1

鼠标事件沿父窗口小部件链向上传播,直到窗口小部件使用 accept() 接受它,或者事件过滤器使用它。

我的猜测是,由于您没有显示相关代码,因此您mousePressEvent接受了该事件。这阻止QtGui了处理它(您的代码完成了所有处理)。

QtGui.QGraphicsItem.mousePressEvent您通过调用执行默认功能(除了您自己的功能)解决了“错误” 。

添加其他两个函数 (mouseMoveEventmouseReleaseEvent) 必须与您添加

QtGui.QGraphicsItem.mousePressEvent(self, event)

给你的mousePressEvent- 这就是为什么它似乎已经解决了这个问题。

于 2016-03-03T23:09:02.220 回答