QT插件
接口类头文件 MyPluginInterface.h
[cpp]view plaincopy
#ifndefINTERFACES_H
#defineINTERFACES_H
#include<QtPlugin>
#defineQtPluginDemo_iid"org.qt-project.Qt.PluginDemo"
classMyPluginInterface
{
public:
virtualintadd(int,int)=0;//正确写法
//virtualintadd(int,int);//不太妥的写法(虽然这也是正确的虚函数声明语句)
//注:接口类中的虚函数都应有实体,或设置为0(推荐),这样
//C++的编译器才能为接口类生成虚函数表。否则,如果没有实现
//接口类的虚函数也没有将其设为0,程序在在链接时可能会失败,
//或者链接成功但最后生成的库无法加载(库中有未定义的符号)
};
Q_DECLARE_INTERFACE(MyPluginInterface,QtPluginDemo_iid);
#endif
插件头文件 MyPlugin.h
[cpp]view plaincopy
#ifndefMYPLUGIN__H
#defineMYPLUGIN__H
#include<QObject>
#include<QDebug>
#include"MyPluginInterface.h"
classMyPlugin:publicQObject,publicMyPluginInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IIDQtPluginDemo_iidFILE"MyPlugin.json")
Q_INTERFACES(MyPluginInterface)
public:
intadd(int,int);
};
#endif
插件源文件 MyPlugin.cpp
[cpp]view plaincopy
#include"MyPlugin.h"
intMyPlugin::add(inta,intb)
{
returna+b;
}
#include"moc_MyPlugin.cpp"
JSON文件 MyPlugin.json,本示例中该文件是空的。
工程文件 MyPlugin.pro
[cpp]view plaincopy
TEMPLATE=lib
CONFIG+=pluginconsole
QT+=core
HEADERS=MyPlugin.hMyPluginInterface.h
SOURCES=MyPlugin.cpp
OTHER_FILES=MyPlugin.json
TARGET=MyPlugin
DESTDIR=./
INCLUDEPATH+=./
#install
target.path=./install
INSTALLS+=target
接口类头文件 MyPluginInterface.h,该文件与插件代码中的一致。
主程序文件 main.cpp
[cpp]view plaincopy
#include"MyPluginInterface.h"
#include<QtPlugin>
#include<QApplication>
#include<QWidget>
#include<QPluginLoader>
#include<QString>
#include<QtDebug>
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
QWidgetw;
QObject*object;
w.show();
app.addLibraryPath(QString("../MyPlugin/install"));//添加库路径
//加载插件,取得实例
QPluginLoaderl(QString("MyPlugin"));
//QPluginLoaderl(QString("libMyPlugin.so"));
if((object=l.instance())!=NULL)
{
qDebug("pluginloaded.");
//使用插件
inta=14,b=23;
MyPluginInterface*plugin=qobject_cast<MyPluginInterface*>(object);
if(plugin)
qDebug("%d+%d=%d",a,b,plugin->add(a,b));
}
else
{
qDebug("failedtoloadplugin!!");
QStringerrorStr=l.errorString();
qDebug()<<errorStr;
}
returnapp.exec();
}
MyApp.pro
[cpp]view plaincopy
######################################################################
#Automaticallygeneratedbyqmake(3.0)??11?1902:26:332014
######################################################################
TEMPLATE=app
QT+=guicorewidgets
CONFIG+=console
TARGET=MyApp
INCLUDEPATH+=.
#Input
HEADERS+=MyPluginInterface.h
SOURCES+=main.cpp
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。