Qt 动态加载图片导致内存泄漏的问题

min80231993 2017-11-03 01:32:21
大家好!
我在嵌入式 linux Qt 开发过程中,利用 QImage 和 QPixmap 实现动态图片资源加载,而后利用 QPalette 实现对控件的界面显示。

如果利用 eventFilter 过滤器,对控件发生的事件过滤(比如按钮的按下和释放加载不同的图片效果),仅是缓慢的操作控件不会报错,但是在快速操作控件时(如快速点击按钮),则会报以下几个错误:

1. malloc() : memory corruption
2. free(): invalid next size (normal)
3. free(): corrupted unsorted chunks
4. double free or corruption

以下是我的开发环境和测试源代码(由于在项目中代码比较分散,所以整合了一个测试的代码,出现的错误信息是一样的,在 PC 下该程序不会报错)

开发环境:
Qt: 4.7.2
Linux: 2.6.29
ARM9 AT91SAM9X5

源代码:




如果您对此问题有想法或者有碰到过类似问题,希望您能留言,提供解决思路或答案!谢谢!

...全文
1078 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
min80231993 2017-11-09
  • 打赏
  • 举报
回复
引用 3 楼 sddsighhz 的回复:
这种效果建议使用qss来实现
谢谢提示。 由于我是通过在 xml 文件中解析出来的图片文件,如果用 QSS 需要将图片文件提取出来保存到文件中,然后再生成 .qrc 和 .rcc 文件,虽也可以实现操作,但是在实现的过程中,由于源 xml 文件中保存了过多的图片文件资源,会频繁的打开和关闭文件,操作 IO,利用过多的 cache 空间。
Creator_莫言 2017-11-07
  • 打赏
  • 举报
回复
这种效果建议使用qss来实现
老马何以识途 2017-11-06
  • 打赏
  • 举报
回复
不懂QT,仅凭猜测:QT中对图片的设置过程并没有很好的做时序控制,当频繁更换图片时,可能出现创建过程未结束、释放过程已经开始的情况,此时内存就完全乱了。若如是,就应该换个方法,或牺牲使用感受了。
min80231993 2017-11-06
  • 打赏
  • 举报
回复
我利用 CSS 静态加载图片时不会出现上面的问题,图片的切换都是能够正常加载的

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧