我有一个用户可以拖动的QGraphicsItem。我想将项目保留在我的场景的右上象限中,所以我像这样覆盖了mouseMoveEvent:
def mouseMoveEvent(self, event):
if self.x() < 0:
self.setPos(0, self.y())
if self.y() + self.rect().height() > 0:
self.setPos(self.x(), -self.rect().height())
就像魅力一样,到目前为止一直很好。
现在我使用itemChanged在项目移动时启动计算。虽然当我的项目到达我定义的边界时,我的项目仍然保持不变,但是当我的鼠标处于“禁区”时,也会调用itemChanged,这是可以理解的。 我想根据上述检查阻止此行为。由于QGraphicsItem不是QObject,因此blockSignals不起作用。知道如何实现这个目标吗?
答案 0 :(得分:1)
我个人更喜欢在使用场景视图框架时使用ItemChange(...)。避免使用mouseMoveEvent。
要禁用itemChange,您可以将项目设置为不可移动。
{
setFlag(QGraphicsItem::ItemSendsGeometryChanges , false);
...
setFlag(QGraphicsItem::ItemSendsGeometryChanges , true);
}