我有一个 QGraphicsScene“场景”和 QGraphicsView“graphicsView”。
我有一个画图的方法。当我需要重绘所有图形时,我调用这个方法。一切都好。但我意识到 scene->clear() 不会改变 sceneRect。
我也尝试过:
graphicsView->items().clear();
scene->clear();
graphicsView->viewport()->update();
之后,如果我通过以下方式获取 sceneRect
QRectF bound = scene->sceneRect();
qDebug() << bound.width();
qDebug() << bound.height();
我希望bound.width和bound.height为“0”。但他们不是。我每次都会看到以前的值。当我清除场景本身时如何清除 sceneRect?
使用 GraphicsView->fitInView() 方法时,场景矩形保持不变会带来一些问题。我使用以下代码:
QRectF bounds = scene->sceneRect();
bounds.setWidth(bounds.width()*1.007); // to give some margins
bounds.setHeight(bounds.height()); // same as above
graphicsView->fitInView(bounds);
虽然我完全清除了场景并只添加了一个相当小的矩形,但由于 sceneRect 仍然太大,所以该矩形不适合视图。
我希望我能解释我的问题。
来自Qt Docs https://doc.qt.io/qt-5/qgraphicsscene.html#sceneRect-prop(强调我的):
该属性保存场景矩形;场景的边界矩形
场景矩形定义了场景的范围。它主要由 QGraphicsView 用于确定视图的默认可滚动区域,并由 QGraphicsScene 用于管理项目索引。
如果未设置,或者设置为空 QRectF,则 sceneRect() 将返回自场景创建以来场景中所有项目的最大边界矩形(即,当项目添加到场景中或在场景中移动时,矩形会增大,但不会缩小).
因此,唯一的办法就是缩小sceneRect
是使用setSceneRect
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)