PyQt4:QGraphicsItem mousePressEvent()禁用标志ItemIsMovable

时间:2016-01-19 18:20:13

标签: mouseevent pyqt4 qgraphicsitem mousepress

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

我重新简化了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)

1 个答案:

答案 0 :(得分:1)

  

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

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

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

添加其他两个功能(mouseMoveEventmouseReleaseEvent)必须与您添加

一致
QtGui.QGraphicsItem.mousePressEvent(self, event)

与您的mousePressEvent对齐 - 这就是为什么它似乎已经解决了问题。