首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存泄漏返回QIcon

内存泄漏返回QIcon
EN

Stack Overflow用户
提问于 2012-04-11 17:25:22
回答 2查看 873关注 0票数 0

我开始使用Qt,但我面临一个大问题:我实现了来自QAbstractListModel类的自定义模型inhrerits。我想做的是用图标显示一个列表。所有的工作和图像显示与我的代码,但它造成内存泄漏。如果我不返回图标,就不会检测到内存泄漏。

代码语言:javascript
复制
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

代码语言:javascript
复制
#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"));
}
EN

回答 2

Stack Overflow用户

发布于 2012-04-11 17:39:37

我不认为QVariant的构造函数使用QIcon作为参数,而且我很惊讶它会编译。当您在期望一个QIcon时返回一个QVariant时,一定有一些疯狂的隐式转换正在进行。您必须知道,在某些情况下,当您创建QVariant时,会有初始对象的深度副本。跟踪创建的q变量,并在不再需要时使用QVariant::clear()

编辑:

顺便说一句,您正在隐式地使用运算符。

代码语言:javascript
复制
QIcon::operator QVariant () const

它返回一个QVariant。这个变体不包含初始的QIcon,而是一个深拷贝。所以,遵循我先前的建议,以消除泄漏。

票数 1
EN

Stack Overflow用户

发布于 2012-04-11 17:54:22

我不认为内存泄漏在代码中,你展示了。

QIcon已经转换为QVarint (用operator QVariant定义),它被标准项模型/项小部件广泛使用。

您也不管理任何指针,也不使用一些显式转换。

因此,这段代码看起来不错,但它可以是代码中的一个内存,使用图标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10110896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档