qt中插件的使用

1.接口文件PlugInterface.h

#include <QtPlugin>
//接口类必须是虚基类,除构造函数、析构函数(最好定义为虚函数)外的成员函数都必须是纯虚函数。
class PlugInterface
{
public:
    virtual QString getPluginName() = 0;
};
//Q_DECLARE_INTERFACE宏告诉Qt这个纯虚类是一个插件接口。
//第一个参数是接口类名,第二个参数是插件标识符,标识符是大小写敏感的且必须是唯一的
Q_DECLARE_INTERFACE(PlugInterface, "com.pluginterface.myplugin");

2.插件头文件Plugin.h

#include "plugin_global.h"
#include "PlugInterface.h"
//插件必须继承接口类PlugInterface和QObject。
class PLUGIN_EXPORT Plugin :public QObject, public PlugInterface
{
        Q_OBJECT
        //Q_PLUGIN_METADATA宏用于描述插件元数据,第一个参数IID是必须的,同插件标识一样
        //而第二个参数FILE是可选的,指定一个本地json文件,该文件中可以描述插件的相关数据信息
        Q_PLUGIN_METADATA(IID "com.myplugin" FILE "a.json")
        Q_INTERFACES(PlugInterface)
public:
    Plugin();
    virtual ~Plugin();
    QString getPluginName();
    void showMessageBox();
};

3.插件源文件Plugin.cpp

#include "Plugin.h"
#include <QMessageBox>
Plugin::Plugin()
{
}

Plugin:: ~Plugin()
{
}

QString Plugin::getPluginName()
{
    return "Plugin";
}

void Plugin::showMessageBox()
{
    
}

4.使用插件

QString strExePath = QCoreApplication::applicationDirPath();    //exe路径
    QPluginLoader loader(strExePath+"/Plugin.dll"); //加载插件
    if (loader.load()) {
        QObject *obj = loader.instance();   //实例化插件
        if (obj) {
            PlugInterface *pPluginInterface = qobject_cast<PlugInterface*>(obj);
            Plugin* pPlugin = (Plugin*)pPluginInterface;
            if (pPlugin) {
                qDebug() << pPlugin->getPluginName();// 测试插件方法  
                qDebug() << loader.metaData();// 输出插件元数据  
            }
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容