我正在调整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)。

我究竟做错了什么 ?

最佳答案

转换提供了对象空间和场景(世界)空间(或父对象的对象空间)之间的映射以进行渲染-它是而不是应用于对象本身。

因此,在对象上设置缩放变换不会更改其边界框,因为该对象尚未缩放-仅是将其映射到场景中的方式。 docs比我能更好地解释它。
QGraphicsItem有许多mapTo...mapFrom...方法可以提供您所需的内容。

关于c++ - 调整QGraphicsItem的大小不会更新Item属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14815778/

10-10 06:27