Не удается сохранить QIcon в приватном классе

У меня есть модель, унаследованная от QAbstractItemModel:

class Plugin: public QObject
{
Q_OBJECT

public:
explicit Plugin(QObject *parent=0);
~Plugin();

const QIcon icon();
void setIcon(const QString &ico);
private:
QIcon mIcon;
};

class PluginsModel: public QAbstractItemModel
{
Q_OBJECT

public:
explicit PluginsModel(QObject *parent=0);
~PluginsModel();
protected:
QList<Plugin*> mList;
};

Я хочу создать экземпляр QIcon только один раз, а в данных просто:

QVariant PluginsModel::data(const QModelIndex &index, int role) const
{
if (mList.isEmpty())
return QVariant();

Plugin *it = static_cast<Plugin*>(index.internalPointer());
switch (role ) {
case Qt::DecorationRole:
switch (index.column()) {
case 0:
return it->icon();
break;
default:
break;
}
}

return QVariant();
}

Итак, функция setIcon выглядит так:

const QIcon Plugin::icon()
{
return mIcon;
}

void Plugin::setIcon(const QString &ico)
{
mIcon = QIcon(ico);
}

И использование:

Plugin *p = new Plugin(this);
p->setIcon(":/images/16/amarok.png");
mPlugins->add(p);

Проблема в том, что он не работает (значок не рисуется). Но если я изменю setIcon на:

void Plugin::setIcon(QIcon &ico)
{
mIcon = ico;
}

… и использование для:

Plugin *p = new Plugin(this);
QIcon i(":/images/16/amarok.png");
p->setIcon(i);
mPlugins->add(p);

… тогда это работает нормально. Кто-нибудь может сказать мне, в чем разница между передачей ссылки QIcon извне и созданием ссылки внутри класса из аргумента пути к изображению?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]