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



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

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

之后,我尝试用

删除它们
  • 为每个项目致电ui->graphicsView->scene()->removeItem(item);
  • 将项目内的像素重置为每个项目用item->setPixmap(QPixmap());空置换pixmap
  • 清除场景:ui->graphicsView->scene()->clear();

以上都不是单独或一起使用,完全减少了使用的内存的量。

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

我做错了什么?

尝试:

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

或,简单:

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

请注意,您不需要以其他方式清除场景。QgraphicsScene可以处理此操作,并且不会尝试显示已删除的项目。

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

最新更新