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