1.场景里面使用removeItem函数,这个函数官方给出如下解释
注意这个词remove只是移除,并不是delete掉,所以只是场景中(显示出来的图元)没有了,空间还是存在。
举个代码例子:
void MyGraphicsView::mouseReleaseEvent(QMouseEvent *event)
{
setCursor(Qt::ArrowCursor);
QGraphicsScene *m_scene=this->scene();
m_scene->removeItem(m_item);
QGraphicsView::mouseReleaseEvent(event);
}
这个m_item的在内存中还是存在的!
2.delete掉场景,场景里面的item都会被自动delete掉
代码如下:
void MyGraphicsView::mouseReleaseEvent(QMouseEvent *event)
{
setCursor(Qt::ArrowCursor);
QGraphicsScene *m_scene=this->scene();
delete m_scene;
QGraphicsView::mouseReleaseEvent(event);
}
看下item的内存:
3.调用场景中的clear函数(推荐使用)
程序源码如下:
void MyGraphicsView::mouseReleaseEvent(QMouseEvent *event)
{
setCursor(Qt::ArrowCursor);
QGraphicsScene *m_scene=this->scene();
m_scene->clear();
QGraphicsView::mouseReleaseEvent(event);
}
内存图如下:
所以在清空的时候直接clear就完了。如果item自己写了一个链表进行备份,调用clear就可以了,不用自己去遍历那个链表然后一个一个delete,在把scene clear掉,这样就和脱裤子打屁一样,
直接调用clear,链表也是,就这样,就这么简单。
原链接