簡體   English   中英

Qt插件:無法從Qt插件獲取枚舉的元數據

[英]Qt plugin: Unable to get enum's metadata from a Qt plugin

我可以從Qt插件訪問很多元數據,但不能以QMetaEnums的身份訪問枚舉。 但是,我可以在我的類中獲取返回該枚舉的方法,並且可以將其轉換為QMetaType並獲取其ID(1026)。 我也需要QMetaEnum中包含的信息。 我想我缺少了一些東西。 請看一下我的代碼:

//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

枚舉已從類外部移至類內部。 這解決了問題。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM