[英]Qt plugin: Unable to get enum's metadata from a Qt plugin
I can access a lot of metadata from my Qt plugin, but I cannot access the enumerations as QMetaEnums. 我可以从Qt插件访问很多元数据,但不能以QMetaEnums的身份访问枚举。 I am however able to get the method in my class which returns that enum, and am able to convert it to QMetaType and get its id (1026).
但是,我可以在我的类中获取返回该枚举的方法,并且可以将其转换为QMetaType并获取其ID(1026)。 I need the info contained in QMetaEnum too.
我也需要QMetaEnum中包含的信息。 I think I am missing something.
我想我缺少了一些东西。 Please take a look at my code:
请看一下我的代码:
//Plugin interface
class PluginInterface
{
public:
virtual void initialize() = 0;
};
#define PluginInterface_iid "pluginInterface"
Q_DECLARE_INTERFACE(PluginInterface, PluginInterface_iid)
//Actual plugin implementing PluginInterface
enum Fruit{ Apple, Pear, Mango };
Q_DECLARE_METATYPE(Fruit)
class MYQTCALCPLUGINSHARED_EXPORT MyQtCalcPlugin : public QObject, PluginInterface
{
Q_CLASSINFO("version", "0.1")
Q_OBJECT
Q_PLUGIN_METADATA(IID PluginInterface_iid FILE "myqtcalcplug.json")
Q_INTERFACES(PluginInterface)
Q_ENUMS(Fruit)
public:
explicit MyQtCalcPlugin(QObject *parent = 0);
void MyQtCalcPlugin::initialize()
{
qRegisterMetaType<MyQtCalcPlugin*>("MyQtCalcPluginPtr");
qRegisterMetaType<Fruit>("Fruit");
qRegisterMetaType<Fruit*>("FruitPtr");
}
public slots:
Fruit TasteFruit()
{
return Fruit::Apple;
}
};
#endif // MYQTCALCPLUGIN_H
//application that is reading the metadata
QPluginLoader pluginLoader(pluginPath);
if (pluginLoader.load());
QObject *pluginInstance = pluginLoader.instance();
auto pluginInterface = qobject_cast<PluginInterface*>(pluginInstance);
pluginInterface->initialize();
const QMetaObject *pMetaObject = pluginInstance->metaObject();
int count = pMetaObject->enumeratorCount(); //count becomes 0
Enum has been moved from outside of the class to inside of it. 枚举已从类外部移至类内部。 This fixed the issue.
这解决了问题。 Q_DECLARE_META_TYPE(Fruit) and qRegisterMetaType were redundant:
Q_DECLARE_META_TYPE(水果)和qRegisterMetaType是冗余的:
#define PluginInterface_iid "pluginInterface"
Q_DECLARE_INTERFACE(PluginInterface, PluginInterface_iid)
//Actual plugin implementing PluginInterface
class MYQTCALCPLUGINSHARED_EXPORT MyQtCalcPlugin : public QObject, PluginInterface
{
Q_CLASSINFO("version", "0.1")
Q_OBJECT
Q_PLUGIN_METADATA(IID PluginInterface_iid FILE "myqtcalcplug.json")
Q_INTERFACES(PluginInterface)
Q_ENUMS(Fruit)
public:
enum Fruit
{
Apple,
Pear,
Mango
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.