张家明做网站,多说与网站账号绑定,江苏建设信息网证书查询电子证书,wordpress注册跳过邮箱验证码此前#xff08;1#xff09;解决的是在QGraphicsItem::boundingRect不变的情况下造成不绘制。这次解决的是QGraphicsItem::boundingRect随时都发生变化导致的不绘制。 这问题是我在不继承QGraphicsLineItem#xff08;调用setLine#xff09;#xff0c;而是继承QGraphic…此前1解决的是在QGraphicsItem::boundingRect不变的情况下造成不绘制。这次解决的是QGraphicsItem::boundingRect随时都发生变化导致的不绘制。 这问题是我在不继承QGraphicsLineItem调用setLine而是继承QGraphicsItem时绘制曲线导致的。通过调试发现boundingRect并不是每次绘制都会调用所以当我们改变了QGraphicsItem::boundingRect时需要场景scene调用该item的boundingRect来获取到新的区域以便判断该QGraphicsItem是不是在QGraphicsView的可视范围内从而觉得需不需要调用QGraphicsItem::paint来绘制。 解决方式在item改变boundingRect的地方调用prepareGeometryChange()。 由于我绘制的曲线item是根据两个QGraphicsItem的坐标去绘制的所以我在重新计算曲线item有效范围改变boundingRect的函数末尾加了prepareGeometryChange()。
下图就是没加prepareGeometryChange的情况。当QGraphicsView放大时部分曲线消失了甚至一块有一块没。缩放回去又出现了。 正常情况 放大部分曲线消失 放大调整视图时曲线不完整