大家好!
我在嵌入式 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

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

解决方案 »

  1.   

    不懂QT,仅凭猜测:QT中对图片的设置过程并没有很好的做时序控制,当频繁更换图片时,可能出现创建过程未结束、释放过程已经开始的情况,此时内存就完全乱了。若如是,就应该换个方法,或牺牲使用感受了。
      

  2.   

    我利用 CSS 静态加载图片时不会出现上面的问题,图片的切换都是能够正常加载的
      

  3.   

    这种效果建议使用qss来实现
      

  4.   


    谢谢提示。由于我是通过在 xml 文件中解析出来的图片文件,如果用 QSS 需要将图片文件提取出来保存到文件中,然后再生成 .qrc 和 .rcc 文件,虽也可以实现操作,但是在实现的过程中,由于源 xml 文件中保存了过多的图片文件资源,会频繁的打开和关闭文件,操作 IO,利用过多的 cache 空间。