Qt工作笔记-QGraphics框架场景中图元的移除与析构

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掉

扫描二维码关注公众号,回复: 2561758 查看本文章

代码如下:

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,链表也是,就这样,就这么简单。

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/81302129