我开始使用Qt,但面临一个大问题:我实现了自定义模型,该模型从QAbstractListModel类继承。我要做的是显示带有图标的列表。所有工作和图像与我的代码一起显示,但它会造成内存泄漏。如果我不返回该图标,则不会检测到内存泄漏。
class MyModel : public QAbstractListModel
{
public:
...
private:
QIcon myicon;
}
QVariant MyModel::data(const QModelIndex &index, int role) const
{
...
if (role == Qt::DecorationRole)
{
return this->myicon;
}
...
}
编辑1
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
MyModel::MyModel(...)
{
...
ui.listWidget->addItem(new QListWidgetItem(QIcon("myicon"), "my text"));
}
最佳答案
我没有看到以QVariant
作为参数的QIcon
构造函数,我很惊讶它可以编译。当您期望返回QIcon
时返回QVariant
时,肯定会有一些疯狂的隐式转换。您必须知道在某些情况下创建QVariant
时会有初始对象的深层副本。跟踪创建的qvariant,并在不再需要它们时使用QVariant::clear()
。
编辑:
顺便说一句,您隐式使用运算符
QIcon::operator QVariant () const
返回
QVariant
。此变体不包含初始的QIcon
,而是一个深层副本。因此,请遵循我之前的建议以消除泄漏。关于c++ - 内存泄漏返回QIcon,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10110896/