预事件 QGraphicsItem 的项已更改



我有一个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);
}

相关内容

  • 没有找到相关文章

最新更新