QGraphicsScene::clear 不会改变 sceneRect

2024-05-14

我有一个 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(使用前将#替换为@)

QGraphicsScene::clear 不会改变 sceneRect 的相关文章

随机推荐