gpt4 book ai didi

c++ - QGraphicsScene::clear 不会改变 sceneRect

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:05 24 4
gpt4 key购买 nike

我有一个 QGraphicsScene“场景”和 QGraphicsView“图形 View ”。

我有一个绘图方法。当我需要重新绘制所有图形时,我调用这个方法。一切都好。但我意识到 scene->clear() 不会改变 sceneRect。

我也试过:

graphicsView->items().clear();
scene->clear();
graphicsView->viewport()->update();

在那之后,如果我得到 sceneRect by

QRectF bound = scene->sceneRect();
qDebug() << bound.width();
qDebug() << bound.height();

我希望 bound.width 和 bound.height 为“0”。但他们不是。我每次都看到以前的值。如何在清除场景本身时清除 sceneRect?

在使用 graphicsView->fitInView() 方法时,sceneRect 保持不变会带来一些问题。我使用以下代码:

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 仍然太大,该矩形不适合 View 。

我希望我能解释我的问题。

最佳答案

来自Qt Docs (强调我的):

This property holds the scene rectangle; the bounding rectangle of the scene

The scene rectangle defines the extent of the scene. It is primarily used by QGraphicsView to determine the view's default scrollable area, and by QGraphicsScene to manage item indexing.

If unset, or if set to a null QRectF, sceneRect() will return the largest bounding rect of all items on the scene since the scene was created (i.e., a rectangle that grows when items are added to or moved in the scene, but never shrinks).

因此,缩小sceneRect的唯一方法是使用setSceneRect

关于c++ - QGraphicsScene::clear 不会改变 sceneRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34449357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com