我有一个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在这里不起作用。知道我如何实现这一目标吗?
就我个人而言,在使用场景视图框架时,我更喜欢使用 ItemChange(...)。避免使用 mouseMoveEvent。
要禁用项目更改,您可以将项目设置为不可移动。
{
setFlag(QGraphicsItem::ItemSendsGeometryChanges , false);
...
setFlag(QGraphicsItem::ItemSendsGeometryChanges , true);
}