如何避免QSS内存泄漏与:图像选择器



我花了几天时间在软件中搜索内存泄漏的来源,至少找到了它。

因此,步骤:我创建了GUI应用程序,将图像添加到.qrc中,在Qt Designer中创建表单,在那里添加QPushButton,并在styleSheet属性中写入

#closeButton{ image: url(:/system/images/White/Close.png); }

(名为"关闭按钮"的按钮(

没有我添加的样式表,程序运行良好,有了样式表,我收到内存泄漏。

那么,在这种情况下,如何避免内存泄漏呢?

在进程终止之前一直存在的对象不一定是内存泄漏,而且该工具无法告诉您哪些是内存泄漏哪些不是。内存泄漏通常只是从同一程序位置多次进行的分配,并且永远不会被释放。即便如此,情况也未必总是如此。泄漏检测需要一个专门制造的测试线束,该线束重复一系列操作,这些操作应该不会多次留下分配在任何给定程序位置的内存。如果您注意到,随着操作数量的增加,留下的内存块数量也在增加,那么您很可能存在真正的泄漏。理想情况下,测试工具应该在每个"操作周期"后对分配的内存块进行快照,并标记出始终留下东西的程序位置。库应该能够捕获堆栈跟踪,以便为您提供进行分配的程序位置。否则在实践中是没有用的。

我非常怀疑在进程终止前释放所有内存的代码:通常这只是浪费时间,延长了系统关闭时间,只是糟糕的用户体验。当用户点击"退出"按钮时,确保数据是安全的(例如,关闭sqlite文件,保存打开的文档——可能就像下次使用应用程序时会返回的"正在进行的工作"一样(,然后调用exit(0)

通常,泄漏检测需要的不仅仅是使用一个库,该库在出口时为您提供一个分配的内存块列表。库是一种工具,作为一个有思维、有推理能力的人类开发人员,你必须将其应用于这个问题:(就像锤子到处敲都不会有用一样(除非你有很多钉子要敲!(,所以它本身就不会是一个"泄漏检测器"库。

最新更新