QGraphicsScene 在clear()之后无法再添加图元 C++
时间: 2023-11-30 08:03:19 浏览: 146
如果在调用 `QGraphicsScene::clear()` 后无法再添加图元,可能是因为您没有重新设置场景的场景范围。当您调用 `QGraphicsScene::clear()` 后,场景中的所有项都被删除,但是场景的边界框不会自动重置。因此,您需要在清除场景后调用 `QGraphicsScene::setSceneRect()` 方法,以便场景的大小适合您要添加的新图元。
以下是一个示例代码片段,展示了如何在清除场景后重新设置场景大小:
```cpp
QGraphicsScene *scene = new QGraphicsScene(parent);
// 添加图元
QGraphicsEllipseItem *ellipse = new QGraphicsEllipseItem(0, 0, 100, 100);
scene->addItem(ellipse);
// 清除场景
scene->clear();
// 重新设置场景大小
scene->setSceneRect(0, 0, 500, 500);
// 添加新图元
QGraphicsRectItem *rect = new QGraphicsRectItem(0, 0, 50, 50);
scene->addItem(rect);
```
这段代码首先创建了一个 `QGraphicsScene` 对象,并添加了一个椭圆形图元。然后,它清除了场景,并重新设置了场景大小。最后,添加了一个新的矩形图元。如果您在清除场景后尝试添加新图元,而没有重新设置场景大小,您就会发现新图元无法正确显示在场景中。
相关问题
QGraphicsScene 在clear()之后setSceneRect()仍然无法再添加图元 C++
如果在调用 `QGraphicsScene::clear()` 和 `QGraphicsScene::setSceneRect()` 后仍然无法添加新图元,可能是因为您没有正确设置图元的位置或大小。请确保新图元的位置和大小在场景范围内,并且没有被其他图元覆盖。
另外,您还可以尝试在添加新图元之前,在场景中添加一个简单的矩形项,以确保场景范围已正确设置。例如:
```cpp
QGraphicsScene *scene = new QGraphicsScene(parent);
// 添加图元
QGraphicsEllipseItem *ellipse = new QGraphicsEllipseItem(0, 0, 100, 100);
scene->addItem(ellipse);
// 清除场景
scene->clear();
// 重新设置场景大小
scene->setSceneRect(0, 0, 500, 500);
// 添加一个简单的矩形项
QGraphicsRectItem *rect = new QGraphicsRectItem(scene->sceneRect());
scene->addItem(rect);
// 添加新图元
QGraphicsRectItem *newRect = new QGraphicsRectItem(0, 0, 50, 50);
newRect->setPos(50, 50);
scene->addItem(newRect);
```
这段代码首先创建了一个 `QGraphicsScene` 对象,并添加了一个椭圆形图元。然后,它清除了场景,并重新设置了场景大小。接下来,它添加了一个简单的矩形项,以确保场景范围已正确设置。最后,添加了一个新的矩形图元。
请注意,新图元的位置和大小是正确的,并且没有被其他图元覆盖。如果您仍然无法添加新图元,请检查新图元的位置和大小是否正确,并确保它们在场景范围内。
QGraphicsScene 在clear()之后setSceneRect(),图元大小位置正确,仍然无法再添加图元 C++
在调用 `setSceneRect()` 后,您可能需要重新设置 `QGraphicsView` 的大小,以便它能够正确显示场景中的所有内容。您可以使用以下代码来自适应场景的大小:
```
QGraphicsView *view = new QGraphicsView(scene);
view->setSceneRect(scene->itemsBoundingRect());
```
如果您仍然无法添加图元,请确保您的场景没有被禁用,您可以使用以下代码启用场景:
```
scene->setEnabled(true);
```
如果问题仍然存在,请考虑检查其他可能导致问题的因素,例如您的图元的大小和位置是否正确,或者您是否正确地设置了图元的属性。
阅读全文