这是一个我意外解决它的错误,并且不知道为什么会这样。我希望有人可以向我解释其背后的逻辑。
我重新简化了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)
答案 0 :(得分:1)
鼠标事件沿父窗口小部件链向上传播,直到窗口小部件 使用accept()接受它,或者事件过滤器使用它。
我的猜测是,由于您没有显示相关代码,因此您mousePressEvent
接受了此事件。这阻止了QtGui
处理它(你的代码完成了所有处理)。
您通过调用执行默认功能的QtGui.QGraphicsItem.mousePressEvent
解决了“错误”(除了您自己的功能)。
添加其他两个功能(mouseMoveEvent
和mouseReleaseEvent
)必须与您添加
QtGui.QGraphicsItem.mousePressEvent(self, event)
与您的mousePressEvent
对齐 - 这就是为什么它似乎已经解决了问题。