QGraphicsItem释放内存——QGraphicsRectItem
最近需要完成一个项目,其中一个小功能就是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相关推荐
- 频繁分配释放内存导致的性能问题的分析--brk和mmap的实现
现象 1 压力测试过程中,发现被测对象性能不够理想,具体表现为: 进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70 2 用ps -o majflt,minflt -C pr ...
- linux手动释放内存的方法
Linux手动释放缓存的方法 Linux释放内存的命令: sync echo 1 > /proc/sys/vm/drop_caches drop_caches的值可以是0-3之间的数字,代表不同 ...
- 释放内存触发断点及数组、指针的NULL初始化
Visual Studio调试时,出现"触发一个断点"内存释放出现异常 数组和对应指针的NULL初始化 数组使用之前要先对其初始化 char Outi[4] = { NULL }; ...
- 【百度分享】频繁分配释放内存导致的性能问题的分析
现象1 压力测试过程中,发现被测对象性能不够理想,具体表现为: 进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70 2 用ps -o majflt,minflt -C prog ...
- linux释放内存命令
1.首先查看linux内存使用 #free -m 2.把内存数据同步到硬盘 #sync 3.修改 /proc/sys/vm/drop_caches文件 #echo 3 > /proc/sys/v ...
- 如何为linux释放内存和缓存
如何为linux释放内存和缓存_华陌飞尘_新浪博客 如何为linux释放内存和缓存 (2011-10-20 10:49:01) 标签: linux swap ...
- C++ 之new和delete释放内存
C++ -释放内存(new和delete) C++动态分配和释放内存 @c.biancheng.net/view/206.html 在C语言中,动态分配内存用 malloc() 函数,释放内存用 fr ...
- Linux下如何释放内存
在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好.但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了. ...
- linux 手动释放内存
当在Linux下 频繁存取文件 或者 程序测试频繁崩溃后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching 因此我们很有必要手动清理系统缓存释放内存. 我们在清理缓存 ...
最新文章
- yabailv 运放_运放的压摆率
- 普通程序员如何转向AI方向(转)
- docker gpu报错Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]
- 基于Windows下python3.4.1IDLE常用快捷键小结
- Linux内核 eBPF基础:perf(1):perf_event在内核中的初始化
- 数据库——MySQL
- 传智播客 GIL(全局解释器锁)学习
- vld(Visual Leak Detector)下载地址和源码地址
- 十一新疆之旅中邂逅的一首诗《黄河,母亲之河》
- 问题 Q(1208): 【基础算法】倒酒问题
- Unity【SwitchableObject】- 实现一个物体开关控制系统
- 腾讯X5 浏览器内核加载
- display和visility
- Unity 人形动画、动画切割、Animator
- 参考文献中不同符号的含义
- 阿里云大数据认证——使用DataV制作实时销售数据可视化大屏-课堂笔记
- Xcode7.3.1中通过最新的CocoaPod安装pop动画引擎
- 高等数理统计 | 一致最优势检验
- 汽车自动驾驶的L0-L5是什么意思?
- 多卡聚合在应急可视化指挥调度的应用