Qt5的插件机制(7)--插件开发示例代码(Lower-level API)
来源:互联网 发布:720全景软件 编辑:程序博客网 时间:2024/05/01 17:19
插件代码
接口类头文件 MyPluginInterface.h
- #ifndef INTERFACES_H
- #define INTERFACES_H
- #include <QtPlugin>
- #define QtPluginDemo_iid "org.qt-project.Qt.PluginDemo"
- class MyPluginInterface
- {
- public:
- virtual int add(int,int) = 0 ; // 正确写法
- // virtual int add(int,int); // 不太妥的写法(虽然这也是正确的虚函数声明语句)
- // 注:接口类中的虚函数都应有实体,或设置为0(推荐),这样
- // C++的编译器才能为接口类生成虚函数表。否则,如果没有实现
- // 接口类的虚函数也没有将其设为0,程序在在链接时可能会失败,
- // 或者链接成功但最后生成的库无法加载(库中有未定义的符号)
- };
- Q_DECLARE_INTERFACE ( MyPluginInterface, QtPluginDemo_iid ) ;
- #endif
插件头文件 MyPlugin.h
- #ifndef MYPLUGIN__H
- #define MYPLUGIN__H
- #include <QObject>
- #include <QDebug>
- #include "MyPluginInterface.h"
- class MyPlugin : public QObject, public MyPluginInterface
- {
- Q_OBJECT
- Q_PLUGIN_METADATA ( IID QtPluginDemo_iid FILE "MyPlugin.json")
- Q_INTERFACES(MyPluginInterface)
- public:
- int add(int,int);
- };
- #endif
插件源文件 MyPlugin.cpp
- #include "MyPlugin.h"
- int MyPlugin::add(int a , int b)
- {
- return a+b ;
- }
- #include "moc_MyPlugin.cpp"
JSON文件 MyPlugin.json,本示例中该文件是空的。
工程文件 MyPlugin.pro
- TEMPLATE = lib
- CONFIG += plugin console
- QT += core
- HEADERS = MyPlugin.h MyPluginInterface.h
- SOURCES = MyPlugin.cpp
- OTHER_FILES = MyPlugin.json
- TARGET = MyPlugin
- DESTDIR = ./
- INCLUDEPATH += ./
- # install
- target.path = ./install
- INSTALLS += target
应用程序代码
接口类头文件 MyPluginInterface.h,该文件与插件代码中的一致。
主程序文件 main.cpp
- #include "MyPluginInterface.h"
- #include <QtPlugin>
- #include <QApplication>
- #include <QWidget>
- #include <QPluginLoader>
- #include <QString>
- #include <QtDebug>
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- QWidget w;
- QObject* object ;
- w.show();
- app.addLibraryPath(QString("../MyPlugin/install")); // 添加库路径
- // 加载插件,取得实例
- QPluginLoader l(QString("MyPlugin")) ;
- //QPluginLoader l(QString("libMyPlugin.so")) ;
- if ( (object=l.instance()) != NULL )
- {
- qDebug("plugin loaded .");
- // 使用插件
- int a = 14 , b = 23 ;
- MyPluginInterface* plugin = qobject_cast<MyPluginInterface*>(object) ;
- if (plugin)
- qDebug("%d + %d = %d",a,b,plugin->add(a,b));
- }
- else
- {
- qDebug("failed to load plugin !! ");
- QString errorStr = l.errorString();
- qDebug()<<errorStr;
- }
- return app.exec();
- }
MyApp.pro
- ######################################################################
- # Automatically generated by qmake (3.0) ?? 11? 19 02:26:33 2014
- ######################################################################
- TEMPLATE = app
- QT += gui core widgets
- CONFIG += console
- TARGET = MyApp
- INCLUDEPATH += .
- # Input
- HEADERS += MyPluginInterface.h
- SOURCES += main.cpp
from: http://blog.csdn.net/newthinker_wei/article/details/41338447
0 0
- Qt5的插件机制(7)--插件开发示例代码(Lower-level API)
- Qt5的插件机制(7)--插件开发示例代码(Lower-level API)
- Qt5的插件机制(6)--开发Qt插件时几个重要的宏
- Qt5的插件机制(1)--Qt 框架中的插件加载机制概述
- Qt5的插件机制(4)--Qt插件的元信息metaData
- JQuery插件开发示例代码
- Qt5插件开发
- Qt5的插件机制(2)--QxxxFactory类与QFactoryLoader类
- Qt5的插件机制(3)--QLibraryPrivate类与QLibraryStore类
- Qt5的插件机制(5)--QLibrary类与QPluginLoader类
- Eclipse 简介和插件开发示例 (IBM的文章)
- IResourceChangeListener 的应用示例(eclipse插件开发应用)
- javabean的妙用-eclipse结合hibernate插件、struts插件快速生成源代码(示例代码)
- FCKeditor插件开发 示例(原创)
- AppCan移动应用开发平台新增9个超实用插件(内含示例代码)
- jquery开发插件示例
- 示例简易的jquery插件开发过程
- 最简单的jquery插件开发示例
- 不知道什么原因 新手 流汗
- 链表
- 函数调用
- FOJ A Super Mobile Charger
- 动态规划01背包
- Qt5的插件机制(7)--插件开发示例代码(Lower-level API)
- STM32函数 命名规则
- java容器源码
- tomcat(4)Tomcat的默认连接器
- json转html样式
- QT插件机制
- 使用Qt编写模块化插件式应用程序
- 见龙在田!告诉你什么是真正的IT运维服务之道
- SpringMVC运行原理