1

QGraphicsScene、QGraphicsView、および QGraphicsItem から派生した独自のクラス (MyGraphicsScene、MyGraphicsView、MyGraphicsItem) があります。

メイン ウィンドウで、MyGraphicsScene の 9 つのインスタンスを作成し、MyGraphicsView の 9 つのインスタンスを通して表示します。9 つの MyGraphicsScenes すべてに、相互へのポインタが含まれています。

1 つの MyGraphicsScene で MyGraphicsItem のインスタンスをドラッグし、特定の MyGraphicsItem インスタンス (残りの 8 つの MyGraphicsScenes で) を同じ量/距離/ベクトルで自動的にドラッグするにはどうすればよいですか?

私の最初のアイデアは、MyGraphicsItem::itemChange (change == QGraphicsItem::ItemPositionChange) を再実装してから、MyGraphicsItem の残りのインスタンス (他の MyGraphicsScenes に含まれる) に対して setPos() を呼び出すことでした。ただし、無限再帰が発生するため、これは機能しません (元の MyGraphicsItem を含め、setPos() は itemChange() もトリガーします)。

経験豊富なQt-ersからの他のアイデアはありますか?

4

2 に答える 2

1

QGraphicsScene複数のビューで同じものを使用できるという事実を知っています。したがって、同じものの複数のビューを取得しようとしている場合はMyGraphicsView、同じシーンですべてを呼び出します。

于 2012-08-29T22:49:52.250 に答える
0

QGraphicsItemの派生クラスを定義し(すでに持っていると思いますか?)、mouseMoveEvent9つのオブジェクトすべてに対してmoveメソッドを呼び出すように再実装します。

QMouseEventたとえばbuttons()、のすべての属性を自由に使用できることを忘れないでくださいpos()

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

お役に立てば幸いです。

于 2012-06-02T07:23:16.143 に答える