1

我有自己的类(MyGraphicsScene、MyGraphicsView、MyGraphicsItem)派生自 QGraphicsScene、QGraphicsView 和 QGraphicsItem。

然后在我的主窗口中创建九 (9) 个 MyGraphicsScene 实例,通过 MyGraphicsView 的九个实例显示。所有九个 MyGraphicsScene 都包含彼此的指针。

如何在一个 MyGraphicsScene 中拖动 MyGraphicsItem 的一个实例,然后自动拖动某些 MyGraphicsItem 实例(在剩余的八个 MyGraphicsScene 中)相同的数量/距离/矢量?

我的第一个想法是重新实现 MyGraphicsItem::itemChange(使用 change == QGraphicsItem::ItemPositionChange),然后为 MyGraphicsItem 的剩余实例(包含在其他 MyGraphicsScenes 中)调用 setPos()。但是,这不起作用,因为我将获得无限递归(setPos() 也会触发 itemChange(),包括原始 MyGraphicsItem)。

来自经验丰富的 Qt-ers 的任何其他想法?

4

2 回答 2

1

我知道你可以QGraphicsScene在多个视图中使用相同的事实。因此,如果您只是想获得同一事物的多个视图,请MyGraphicsView使用相同的场景调用所有视图。

于 2012-08-29T22:49:52.250 回答
0

如果您为 QGraphicsItem 定义派生类(我想您已经有了,对吗?)并重新实现它,mouseMoveEvent那么它会调用所有 9 个对象的 move 方法。

请记住,您可以随意使用 的所有属性,QMouseEvent例如。buttons()pos()

void MyGraphicsItem::mouseMoveEvent( QMouseEvent *event )
{
  if (event->buttons() & Qt::LeftButton) {
    QPoint pos = event->pos();
    // ...
  }
}

希望有帮助!

于 2012-06-02T07:23:16.143 回答