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



我试图为我的项目创建一个样式插件,该插件似乎正在加载,但是为什么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
}

在我的主():

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?

那是因为你的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

相关内容

  • 没有找到相关文章

最新更新