最近需要完成一个项目,其中一个小功能就是new出来的QGraphicsRectItem内存无法释放,我的每一轮QGraphicsRectItem都会变化,但是如果不停的new QGraphicsRectItem就会产生内存堆积

GraphicsView 框架

Graphics View包含三个类的使用;

  • 场景类(QGraphicsScene):该类提供绘图场景(Scene),场景是不可见的,是一个抽象的管理图形项的容器,可向场景中添加图形项,获取场景中的某个图形项等

  • 视图类(QGraphicsView):该类提供绘图的视图(View)组件,用于显示场景中的内容。可以为一个场景设置几个视图,用于对同一个数据集提供不同的观察方式

  • 图形项类(QGraphicsItem):该类提供了一些基本的图形元件,也可在此基础上自定义图形项,它支持各种事件的响应,如鼠标事件、键盘事件、拖放事件等,以实现图形的交互功能,下面列举一些标准图元:

QGraphicsEllipseItem 椭圆

QGraphicsLineItem 直线

QGraphicsPathItem 路径

QGraphicsPixmapItem 图像

QGraphicsPolygonItem 多边形

QGraphicsRectItem 矩形

QGraphicsSimpleTextItem 简单文本

QGraphicsTextItem 文本浏览

QGraphicsItem是图元的基类,用户可以继承QGraphicsItem实现自定义的图元;

以下内容以QGraphicsRectItem为例

QGraphicsItem定义

    QGraphicsRectItem *m_rectItem = new QGraphicsRectItem();

QGraphicsItem释放内存

一般来说,以下两句代码可以清理内存,如果只removeItem无法释放内存,只是将item移除场景了

需要继续delete 清除掉

m_scene->removeItem(m_rectItem);
delete m_rectItem;

但是如果我想保留m_rectItem,只到下一次新的m_rectItem进来再删除,就不能直接在new QGraphicsRectItem();之后delete,这样无法显示我们的item,我们需要在循环的最开头加上判断

//先在.h文件中定义指针
public:MainWindow(QWidget *parent = nullptr);~MainWindow();QGraphicsRectItem *m_rectItem = new QGraphicsRectItem();
//先判断,删除已有Item
if (m_rectItem != NULL){qDebug("hdsfg");m_scene->removeItem(m_rectItem);delete m_rectItem;m_rectItem = 0;}
//再new
m_rectItem = new QGraphicsRectItem();

QGraphicsItem释放内存——QGraphicsRectItem相关推荐

  1. 频繁分配释放内存导致的性能问题的分析--brk和mmap的实现

    现象 1 压力测试过程中,发现被测对象性能不够理想,具体表现为:  进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70  2 用ps -o majflt,minflt -C pr ...

  2. linux手动释放内存的方法

    Linux手动释放缓存的方法 Linux释放内存的命令: sync echo 1 > /proc/sys/vm/drop_caches drop_caches的值可以是0-3之间的数字,代表不同 ...

  3. 释放内存触发断点及数组、指针的NULL初始化

    Visual Studio调试时,出现"触发一个断点"内存释放出现异常 数组和对应指针的NULL初始化 数组使用之前要先对其初始化 char Outi[4] = { NULL }; ...

  4. 【百度分享】频繁分配释放内存导致的性能问题的分析

    现象1 压力测试过程中,发现被测对象性能不够理想,具体表现为:  进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70  2 用ps -o majflt,minflt -C prog ...

  5. linux释放内存命令

    1.首先查看linux内存使用 #free -m 2.把内存数据同步到硬盘 #sync 3.修改 /proc/sys/vm/drop_caches文件 #echo 3 > /proc/sys/v ...

  6. 如何为linux释放内存和缓存

    如何为linux释放内存和缓存_华陌飞尘_新浪博客 如何为linux释放内存和缓存     (2011-10-20 10:49:01)        标签:     linux     swap    ...

  7. C++ 之new和delete释放内存

    C++ -释放内存(new和delete) C++动态分配和释放内存 @c.biancheng.net/view/206.html 在C语言中,动态分配内存用 malloc() 函数,释放内存用 fr ...

  8. Linux下如何释放内存

    在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好.但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了. ...

  9. linux 手动释放内存

    当在Linux下 频繁存取文件 或者 程序测试频繁崩溃后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching 因此我们很有必要手动清理系统缓存释放内存. 我们在清理缓存 ...

最新文章

  1. yabailv 运放_运放的压摆率
  2. 普通程序员如何转向AI方向(转)
  3. docker gpu报错Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]
  4. 基于Windows下python3.4.1IDLE常用快捷键小结
  5. Linux内核 eBPF基础:perf(1):perf_event在内核中的初始化
  6. 数据库——MySQL
  7. 传智播客 GIL(全局解释器锁)学习
  8. vld(Visual Leak Detector)下载地址和源码地址
  9. 十一新疆之旅中邂逅的一首诗《黄河,母亲之河》
  10. 问题 Q(1208): 【基础算法】倒酒问题
  11. Unity【SwitchableObject】- 实现一个物体开关控制系统
  12. 腾讯X5 浏览器内核加载
  13. display和visility
  14. Unity 人形动画、动画切割、Animator
  15. 参考文献中不同符号的含义
  16. 阿里云大数据认证——使用DataV制作实时销售数据可视化大屏-课堂笔记
  17. Xcode7.3.1中通过最新的CocoaPod安装pop动画引擎
  18. 高等数理统计 | 一致最优势检验
  19. 汽车自动驾驶的L0-L5是什么意思?
  20. 多卡聚合在应急可视化指挥调度的应用

热门文章

  1. 实例011阳阳买苹果
  2. 消息称暴雪代理谈判进入第二阶段,与四家中国代理商谈判
  3. Python-基于OpenCV的轮廓填充 泛洪算法 孔洞填充
  4. 618电商大数据分析可视化报告
  5. 速看|快速软件开发框架突破信息孤岛,高效实现数字化发展!
  6. 宁波市第一医院附近的房屋调研
  7. 【线程池的工作参数、什么情况下会触发最大线程数?什么情况下会回收线程?】
  8. 【听】《斯坦福极简经济学》,国家调控
  9. SIM卡无法识别经验案例
  10. 微信小程序,画布中,根据需要展示的图片比例,获取能截取原图中的最大图片尺寸,并且不变形展示