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