加载Qt样式插件但缺少密钥

时间:2017-11-01 19:16:56

标签: qt qtplugin

我试图为我的项目创建一个样式插件,插件似乎正在加载,但为什么QStyleFactory :: keys()没有返回我的密钥? 通过将QT_DEBUG_PLUGINS设置为1,我得到以下消息:

Found metadata in lib .../styles/libstyles.so, metadata=
{
    "IID": "this.is.my.style",
    "MetaData": {
        "Keys": [
            "mystyle"
        ]
    },
    "className": "MyStylePlugin",
    "debug": true,
    "version": 329986
}

在我的main()中:

QApplication app(argc, argv);
QApplication::setStyle(QStyleFactory::create("mystyle"));
qDebug() << QStyleFactory::keys();

最后一个qDebug语句打印:

Got keys from plugin meta data ()
("Windows", "Fusion") <= Shouldn't "mystyle" also show up here?

1 个答案:

答案 0 :(得分:2)

那是因为您的IID应该是""org.qt-project.Qt.QStyleFactoryInterface"而不是"this.is.my.style"。如果您更改了IID,则插件无法被Qt识别为样式插件。

以下是检测密钥的Qt代码的摘录:

QString iid = library->metaData.value(QLatin1String("IID")).toString();
if (iid == QLatin1String(d->iid.constData(), d->iid.size())) {
    QJsonObject object = library->metaData.value(QLatin1String("MetaData")).toObject();
    metaDataOk = true;
    QJsonArray k = object.value(QLatin1String("Keys")).toArray();
    for (int i = 0; i < k.size(); ++i)
        keys += d->cs ? k.at(i).toString() : k.at(i).toString().toLower();
}
if (qt_debug_component())
    qDebug() << "Got keys from plugin meta data" << keys;

如果您插件中的IID与预期的IID(d->iid)不匹配,您可以在第二行看到,代码将无法尝试阅读MetaData