【Qt】Qt Plugin:Qt插件创建与使用
来源:互联网 发布:淘宝代理 编辑:程序博客网 时间:2024/05/28 06:05
插件接口设计
以a+b=c的接口为例:int add(int a, int b)
在 主项目 工程中创建接口文件(一个头文件)eg:Add.h
#ifndef ADD_H#define ADD_H#include <QtPlugin>class Add{public: virtual int add(int a, int b)= 0;//纯虚函数};Q_DECLARE_INTERFACE(Add, "org.qt-project.Qt.QGenericPluginFactoryInterface")#endif // ADD_H
使用插件接口
在项目中对插件接口的使用
int a, b, eq; QPluginLoader loader("D:/2-software/qt/qt5.6/5.6/mingw49_32/plugins/generic/plugin.dll"); if (loader.load()) { qDebug()<<"loader load OK!"; QObject *obj = loader.instance(); if (obj) { qDebug()<<"obj OK! obj->metaObject()->className()=" << obj->metaObject()->className(); Add *plugin = dynamic_cast<Add*>(obj); qDebug()<<"plugin = " << plugin; if (plugin) { qDebug() << loader.metaData(); qDebug()<<"plugin OK!"; eq = plugin->add(a, b); } else { qDebug()<<"plugin error!"; } } else { qDebug()<<"obj error!"; } } else { qDebug()<<"loader load error!"; }
实现插件接口
新建插件工程
新建文件或项目–>选择Library–>C++库
选择库类型为:Qt Plugin
选择kit套件
选择基类QGenericPlugin
自动创建的文件列表
添加自己的接口
添加Add插件接口,将主项目中Add.h拷贝到插件项目中,修改GenericPlugin.h文件,GenericPlugin插件类继承QObject和插件接口类Add,并重新实现Add的add接口
GenericPlugin.h如下:
#include "Add.h"#include <QObject>class GenericPlugin : public QObject, public Add{ Q_OBJECT#if QT_VERSION >= 0x050000 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QGenericPluginFactoryInterface" FILE "plugin.json")#endif // QT_VERSION >= 0x050000public: GenericPlugin(QObject *parent = 0); int add(int a, int b);};
GenericPlugin.cpp如下
#include "GenericPlugin.h"GenericPlugin::GenericPlugin(QObject *parent) : QObject(parent){}int GenericPlugin::add(int a, int b){ return a+b;}#if QT_VERSION < 0x050000Q_EXPORT_PLUGIN2(plugin, GenericPlugin)#endif // QT_VERSION < 0x050000
参数传递
参数可以通过plugin.json中定义的键值对来传递,在主项目中可以通过,loader.metaData();接口来获取
plugin.json
{ "Keys" : [ 123123123]}
插件安装位置
插件默认安装qt的安装目录下qt\qt5.6\5.6\mingw49_32\plugins\generic中
pro文件
QT += core guiTARGET = plugin //生成的插件名字TEMPLATE = lib //插件也是库CONFIG += pluginDESTDIR = $$[QT_INSTALL_PLUGINS]/generic//插件安装位置SOURCES += GenericPlugin.cppHEADERS += GenericPlugin.h \ Add.hDISTFILES += plugin.jsonunix { target.path = /usr/lib INSTALLS += target}
阅读全文
0 0
- 【Qt】Qt Plugin:Qt插件创建与使用
- [QT]qt plugin插件
- QT之插件Plugin生成与使用
- Qt--时钟插件的创建与使用
- qt 创建插件和使用
- QT中的插件---load plugin
- QT中的插件---load plugin
- Qt Plugin创建及调用
- qt plugin
- qt plugin
- qt plugin
- qt plugin
- QT如何创建和使用Qt Plugins (插件)
- QT创建应用程序插件
- QT中使用静态插件(plugin)LIB小TIP
- QT使用插件QAxWidget
- QT使用插件QAxWidget
- QT使用插件QAxWidget
- noip滚粗记
- 记录开通
- 13.1如何集成通用Mapper
- java IO的字节流和字符流及其区别
- HTTPS与HTTP详解
- 【Qt】Qt Plugin:Qt插件创建与使用
- python中关于cur.connect()等方法的应用实例
- 58. Length of Last Word
- win10 wireshark不显示网卡问题
- linux命令行快捷键
- mt2503短信數量和定義的不一致
- Apache Kylin
- 技术分享连载(五十六)
- JS适配各大手机的计算方式