更改 boundingRect 后的 QGraphicsItem 位置

Posted

技术标签:

【中文标题】更改 boundingRect 后的 QGraphicsItem 位置【英文标题】:QGraphicsItem position after changing boundingRect 【发布时间】:2016-11-10 14:35:11 【问题描述】:

我的类派生自QGraphicsItem。它包含我在油漆中绘制的点向量:

for(int i = 0; i < _vertexes.size(); i++)

     ...
  painter->drawEllipse(_vertexes[i], POINT_RADIUS, POINT_RADIUS);

当我使用此代码在_vertexes 中添加点时

 prepareGeometryChange();
 _vertexes.pop_back();

视图中点的位置正在改变,boundingRect 使用_vertexes 计算

如何保存积分位置?如果新的boundingRect 更大,我不希望在添加新点后所有点都改变位置。 pos() 总是返回相同的位置 (0, 0) 但它可能在屏幕的不同位置。

【问题讨论】:

听起来好像是QGraphicsScene 在边界矩形更改而不是项目实际更改位置时在QGraphicsView 内滚动。尝试设置场景矩形explicitly 谢谢,sceneRect的设置帮我解决了问题 【参考方案1】:

我没有设置初始sceneRect,因此在每个增加的场景项目边界矩形后重新计算和滚动。设置场景 rect by ui-&gt;graphicsView-&gt;setSceneRect(x, y, width, heigh); 在添加我的项目解决问题之前,

【讨论】:

以上是关于更改 boundingRect 后的 QGraphicsItem 位置的主要内容,如果未能解决你的问题,请参考以下文章

QGraphicsRectItem.boundingRect() 在移动期间未更新

QTransform 比例和 boundingRect.size() 之间的关系

QFontMetrics boundingRect

OpenCV 的 cv2.boundingRect() 函数是如何工作的?

在 UILabel 的 draw#rect 中获取字形 boundingRect

计算boundingRect的QGraphicsPathItem问题