QT插件
2016-10-17 18:29
169 查看
插件代码
接口类头文件 MyPluginInterface.h[cpp] view plain copy
#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
[cpp] view plain copy
#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
[cpp] view plain copy
#include "MyPlugin.h"
int MyPlugin::add(int a , int b)
{
return a+b ;
}
#include "moc_MyPlugin.cpp"
JSON文件 MyPlugin.json,本示例中该文件是空的。
工程文件 MyPlugin.pro
[cpp] view plain copy
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
[cpp] view plain copy
#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
[cpp] view plain copy
######################################################################
# 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
相关文章推荐
- Qt的插件机制
- 周报——Qt自定键盘插件的制作和使用
- Qt插件
- qt与mysql连接(驱动插件问题) 完美版
- QT插件开发方式
- 解决Qt程序发布时中文乱码问题(通过QApplication.addLibraryPath加载QTextCodec插件)
- 安装QT插件(qt-vs-addin)后,vs2008无法启动的问题
- 利用QT_DEBUG_PLUGINS检查Qt的插件问题
- Qt 绘图表、曲线 第三方插件
- Qt的插件机制
- qt插件之编译顺序
- QT实现浏览器插件 调用及回调 (一)
- 自定义Qt插件
- Qt5笔记之Qt5插件的生成与加载及json文件的读取
- ubuntu 安装 QT 及绘图插件 未完
- Qt插件使用学习笔记PART2
- QT 发布的exe文件在未安装Qt的电脑中找不到插件的解决方案
- Qt 插件
- vs 2010 中用qt插件编写动态库dll
- Qt Creator插件制作小插曲:有关QT_NO_CAST_FROM_ASCII的注意事项