1

次のように QGraphicsItem (mItem) のサイズを変更しています:

  QRectF itemSize = mItem->boundingRect();

  float scale_width = width / itemSize.width();
  float scale_height = height / itemSize.height();

  QTransform t;
  t.scale(scale_width, scale_height);
  mItem->setTransform(t);

視覚的には本来あるべきことを行いますが、サイズ変更後にboundingRectを取得しても、変更されていません。私は、boundingRect は変更されず、スケールが変更される可能性があるという印象を受けましたが、それも同じままです。元のboundingRectが(0,0,100,100)で、新しい幅IDが200で新しい高さが200の場合、新しいboundingRectは(0,0,200,200)であると予想されます。

私は何を間違っていますか?

4

1 に答える 1

1

変換は、レンダリングのためにオブジェクト空間とシーンの (ワールド) 空間 (または親のオブジェクト空間) の間のマッピングを提供します。オブジェクト自体には適用されません。

そのため、オブジェクトにスケール変換を設定しても、オブジェクトはスケーリングされていないため、バウンディング ボックスは変更されません。シーンにマップされる方法のみです。ドキュメントは、私ができるよりもよく説明しています。

QGraphicsItemには、必要なものを提供する多くmapTo...mapFrom...方法があります。

于 2013-02-11T17:49:08.843 に答える