我有一个 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()仅将其从场景中删除,但不能释放内存。