Qt 插件 V4
2017-01-05 18:02
169 查看
qt插件在windows下就是态链接库,或者说静态链接库。(dll lib) 下文统称为qt插件。
主程序不需要lib文件就可以使用qt插件,并且可以编译成功;有点类似于动态加载dll。
4.8.7\examples\tools\echoplugin
1). 定义接口
Q_DECLARE_INTERFACE(EchoInerface, "EchoInterface")
接口类名 接口文本名字(任意 区分其他接口)
2)定义插件 插件了实现接口中的函数
#include "echointerface.h"
class EchoPlugin: public QObject, EchoInterface
{
Q_OBJECT
Q_INTERFACES(EchoInterface)
public:
QString echo(const QString &msg);
}; Q_INTERFACES(EchoInterface) 表明该插件实现的是哪个接口
接口类名
#include "echoplugin.h"
#include <QtGui>
QString EchoPlugin::echo(const QString &msg)
{
return msg;
}
Q_EXPORT_PLUGIN2(echoplugin, EchoPlugin) Q_EXPORT_PLUGIN2(echoplugin, EchoPlugin) 表明导出的lib文件 dll文件名是什么 以及插件类是哪个
文件名 插件类名
3)使用插件
EchoInterface *interface; // 接口指针
bool load()
{
QDir pluginDir("."); // 准备在当前文件夹查找 dll 插件文件
foreach(QString filename, pluginDir.entryList(QDir::Files))
{
qDebug()<<filename;
QPluginLoader loader(pluginDir.absoluteFilePath(filename)); // 加载每个文件
QObject *plugin = loader.instance(); // 返回实例对象
if(plugin)
{
interface = qobject_cast<EchoInterface*>(plugin); // 若属于EchoInterface接口,则表明插件存在
if(interface)
return true;
}
}
return false;
qDebug()<<"failed to load";
}
interface->echo("message"); // 插件存在 则可以直接调用其函数
主程序不需要lib文件就可以使用qt插件,并且可以编译成功;有点类似于动态加载dll。
4.8.7\examples\tools\echoplugin
1). 定义接口
class EchoInterface { public : virtual ~EchoInterface(){} virtual QString echo(const QString &msg) = 0; }; Q_DECLARE_INTERFACE(EchoInterface, "EchoInterface")
Q_DECLARE_INTERFACE(EchoInerface, "EchoInterface")
接口类名 接口文本名字(任意 区分其他接口)
2)定义插件 插件了实现接口中的函数
#include "echointerface.h"
class EchoPlugin: public QObject, EchoInterface
{
Q_OBJECT
Q_INTERFACES(EchoInterface)
public:
QString echo(const QString &msg);
}; Q_INTERFACES(EchoInterface) 表明该插件实现的是哪个接口
接口类名
#include "echoplugin.h"
#include <QtGui>
QString EchoPlugin::echo(const QString &msg)
{
return msg;
}
Q_EXPORT_PLUGIN2(echoplugin, EchoPlugin) Q_EXPORT_PLUGIN2(echoplugin, EchoPlugin) 表明导出的lib文件 dll文件名是什么 以及插件类是哪个
文件名 插件类名
3)使用插件
EchoInterface *interface; // 接口指针
bool load()
{
QDir pluginDir("."); // 准备在当前文件夹查找 dll 插件文件
foreach(QString filename, pluginDir.entryList(QDir::Files))
{
qDebug()<<filename;
QPluginLoader loader(pluginDir.absoluteFilePath(filename)); // 加载每个文件
QObject *plugin = loader.instance(); // 返回实例对象
if(plugin)
{
interface = qobject_cast<EchoInterface*>(plugin); // 若属于EchoInterface接口,则表明插件存在
if(interface)
return true;
}
}
return false;
qDebug()<<"failed to load";
}
interface->echo("message"); // 插件存在 则可以直接调用其函数
相关文章推荐
- QT4.7.1版本 mysql驱动插件 编译的问题
- Qt使用插件的形式调用DLL
- QT使用MySql的配置(使用addLibraryPath载入插件),编译QT的MySql驱动问题及解决方案(自己使用libmysql.lib进行编译mysql.pro,万不得已可以查看Makefile.Debug以解决问题)
- Eclipse添加Qt插件
- QT插件开发方式
- Qt 4 mysql 编译插件 测试 QSqlDatabase: QMYSQL driver not loaded
- Qt中如何 编写插件 加载插件 卸载插件
- VS2013中使用QT插件后每次重新编译问题
- 构建自己的Qt插件系统
- 详解如何建立Qt插件学习教程
- 【转】qt-vs-addin:Qt4和Qt5之VS插件如何共存与使用
- qt-vs-addin:Qt4和Qt5之VS插件如何共存与使用
- Qt写Activex插件 总结
- Qt5程序发布QPrintDialog需要的插件
- Qt 5 软件发布===》插件路径
- Qt5.2.1交叉编译,带tslib插件
- 设置qt插件路径
- windows下Qt插件qwt中plot编程
- 在Qt中如何编写插件,加载插件和卸载插件。
- QT5.3.1和VS2013开发,安装插件后在VS2013建新工程报错模块计算机类型“x64”与目标计算机类型“X86”冲突