如何通过删除不必要的QGraphicsItems来释放内存?

时间:2017-02-27 11:47:36

标签: qt memory-management

我有一个QGraphicsScene,其中包含大量的QGraphicsPixmapItem s,包含大型像素图。

作为测试,我在场景中添加了很多项目,以使我的程序使用数百MB的内存。

之后,我尝试删除它们,

  • 为每件商品调用ui->graphicsView->scene()->removeItem(item);
  • 将项目内的像素图重置为每个项目item->setPixmap(QPixmap());清空pixmaps
  • 清除场景:ui->graphicsView->scene()->clear();

以上所有内容,无论是单独使用还是一起使用,都会减少使用的内存量。

请注意,QGraphicsPixmapItem本身不会被删除,它们会保留在容器中。但是,在对它们使用setPixmap()之前,它们几乎不使用任何内存。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

试试:

foreach(QGraphicsItem *item, ui->graphicsView->scene()->items()) {
    delete item;
}

或者,简单地说:

qDeletaAll( scene()->items() );

请注意,您无需以任何其他方式清除场景。 QGraphicsScene可以处理此问题,不会尝试显示已删除的项目。

clear()仅从场景中删除它,但不释放内存。