0

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

1 回答 1

3

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

这是检测到键的 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.

于 2017-11-02T09:38:44.473 回答