首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >派生自QSettings和存储QIcon

派生自QSettings和存储QIcon
EN

Stack Overflow用户
提问于 2013-05-17 16:45:35
回答 1查看 404关注 0票数 1

我尝试使用类来存储QIcon,类派生于QSettings,如下所示:

setValue("fancy_icon",QIcon::fromTheme("document-new"));

但我有个错误:

QVariant::保存:无法保存类型69。

但不起作用。令人惊讶的是,如果我只是构造了一个QSettings实例并保存了69类型(QIcon)元素中的任何一个,那么它工作得很好。

代码语言:javascript
复制
QSettings set;
set.setValue("foo", QIcon());
setValue("fancy_icon", QIcon::fromTheme("document-new"));

问题是-为什么现在起作用了?我怎样才能做得更好?

EN

回答 1

Stack Overflow用户

发布于 2013-05-17 17:25:16

对Qt的消息来源做了些调查。

qvariant.cpp中,只有unable to save type错误调用在这里:

代码语言:javascript
复制
if (!QMetaType::save(s, d.type, constData())) {
    Q_ASSERT_X(false, "QVariant::save", "Invalid type to save");
    qWarning("QVariant::save: unable to save type %d.", d.type);
}

所以我去了QMetaType::save

代码语言:javascript
复制
bool QMetaType::save(QDataStream &stream, int type, const void *data)
{
    ...
    case QMetaType::QPalette:
    case QMetaType::QIcon:
    case QMetaType::QImage:
    ...
        if (!qMetaTypeGuiHelper)
            return false;
        qMetaTypeGuiHelper[type - FirstGuiType].saveOp(stream, data);
        break;
    ...
    return true;
}

qMetaTypeGuiHelper声明如下:

代码语言:javascript
复制
Q_CORE_EXPORT const QMetaTypeGuiHelper *qMetaTypeGuiHelper = 0;  

显然,在您的例子中,qMetaTypeGuiHelper等于零。所以我决定找出,它是在哪里创建的。并在QtGui模块中找到:

代码语言:javascript
复制
static const QVariant::Handler *qt_guivariant_last_handler = 0;
int qRegisterGuiVariant()
{
    qt_guivariant_last_handler = QVariant::handler;
    QVariant::handler = &qt_gui_variant_handler;
    qMetaTypeGuiHelper = qVariantGuiHelper;
    return 1;
}
Q_CONSTRUCTOR_FUNCTION(qRegisterGuiVariant)

int qUnregisterGuiVariant()
{
    QVariant::handler = qt_guivariant_last_handler;
    qMetaTypeGuiHelper = 0;
    return 1;
}
Q_DESTRUCTOR_FUNCTION(qUnregisterGuiVariant)

这意味着,为了将QIcon保存到QVariant,只需调用qRegisterGuiVariant();。但是这个函数已经在QApplicationPrivate::initialize()中调用了,它是从QApplicationPrivate::construct调用的,它被称为(哇,好长的列表.)来自QApplication::QApplication(int &argc, char **argv)

因此,我不得不问,在您的main函数中,您是否创建了QApplication实例?

P.S:那很有趣:)

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

https://stackoverflow.com/questions/16614150

复制
相关文章

相似问题

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