-
创建接口头文件,Q_DECLARE_INTERFACE,定义接口
#ifndef PLUGINONEINTERFACE_H
#define PLUGINONEINTERFACE_H
#include <QWidget>
// 组织域名+产品名+版本号
#define PluginOneInterfaceIID "baidu.com.PluginOneInterface/1.0"
class PluginOneInterface
{
public:
virtual ~PluginOneInterface() = default;
virtual QWidget* getWidget() = 0;
};
Q_DECLARE_INTERFACE(PluginOneInterface,PluginOneInterfaceIID)
#endif // PLUGINONEINTERFACE_H -
编写插件类,继承接口类
class PLUGINONE_EXPORT PluginOne:public QObject ,public PluginOneInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID PluginOneInterfaceIID FILE "PluginOne.json")
Q_INTERFACES(PluginOneInterface)
public:
PluginOne();
~PluginOne();
QWidget * getWidget() override;
private:
QWidget * mWidget{nullptr};
}; -
主项目加载插件
-
获取插件中元数据Q_PLUGIN_METADATA的json数据
QJsonObject meta = loader.metaData();
QJsonObject metaData = meta.value("MetaData").toObject();
QString version = metaData.value("version").toString();
QString name = metaData.value("name").toString();
