需要QGraphicsScene信号或事件进行_after_更改

eik*_*kuh 4 events qt signals qgraphicsscene

我使用QGraphicsSceneQt框架。在场景内部,我有一些QGraphicsItem可供用户选择和移动的。我想要一个信息标签,其中显示当前移动的选择的当前x和y坐标(可以包含许多项)。

我曾尝试与信号changedQGraphicsScene。但是将项的x()和y()属性设置为新值之前将其触发。因此,标签始终显示倒数第二个坐标。如果缓慢移动鼠标,则显示不是很错误。但是随着动作的迅速和突然的停止,标签是错误的。我需要场景改变触发的信号。

我还尝试覆盖的itemChange方法QGraphicsItem。但这是一样的。更改之前将其触发。(新坐标位于此方法的参数内,但我需要一次同时选择所有选定项的新坐标)

我也试图重写mouseMove的事件QGraphicsSceneQGraphicsView,但他们也有之前设定的新坐标。

我做了一个测试:我使用了单触发定时器,以便在信号发出100毫秒后更新标签。然后一切正常。但是计时器对我来说不是解决方案。

我能做什么?使所有物品不可移动并自己处理所有物品?

Chr*_*ris 5

QGraphicsItem::itemChange()是正确的方法,您可能只是在检查错误的标志。这样的事情应该可以正常工作:

QVariant::myGraphicsItem( GraphicsItemChange change, const QVariant &value )
{
  if( change == QGraphicsItem::ItemPositionHasChanged )
  {
     // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,使用QGraphicsItem::ItemPositionHasChanged而不是QGraphicsItem::ItemPositionChange,前者是位置更改后而不是之前调用的。