c++ - 如何从 QGraphicsScene 中删除所有 QGraphicsItem

标签 c++ qt incomplete-type

我已经从 QGraphicsScene 编写了一个派生类。有时我需要从场景中移除所有项目,并且我希望这些项目被物理销毁(调用析构函数)。我尝试了以下方法:

QList<QGraphicsItem*> all = items();
for (int i = 0; i < all.size(); i++)
{
    QGraphicsItem *gi = all[i];
    removeItem(gi);
    delete gi; // warning at this line
}

Qt Creator 发出警告:警告:C4150:删除指向不完整类型“QGraphicsItem”的指针;没有调用析构函数

我不确定这是为什么。 QGraphicsItem 具有虚拟析构函数,因此应从内存中删除项目。

如果这不是正确的方法,我如何从 QGraphicsScene 中删除所有 QGraphicsItem?请注意,我知道删除场景时,所有项目也将被删除。但我想从场景中删除项目并绘制其他项目。我希望删除的项目从内存中删除。

最佳答案

您可以使用 QGraphicsScene::clear() 移除和删除所有项目.

关于c++ - 如何从 QGraphicsScene 中删除所有 QGraphicsItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7431084/

相关文章:

C++ 和带有国家符号的文件路径(可能用 utf8 编码)

c++ - 如何从多个静态库中创建一个静态库?

c++ - 如何在不捕获变量的情况下对 lambda 中的变量使用 decltype?

c++ - 如何使用硬件加速在 Qt 中绘画?

QT 套接字不读取所有数据

C - 取消引用指向不完整类型的指针 - 将字符串插入二叉搜索树

c++ - 类模板继承自不完整的类

c++ - 包含模板类型的头文件

qt - QListWidget 向下滚动列表后拖动

c - 字段有不完整的类型错误