制作Qt应用程序的插件(使用QtPlugin),对比DLL它是全平台通用的

在Qt下,插件有两种形式,一种是用于QtCreator下,扩展IDE功能。另一种是用于扩展开发者的应用。本文要讲的是后者。

定义一个纯虚类作为插件接口

[cpp] view plain copy

  1. #include <QtPlugin>
  2. #include <QString>
  3. class IMyPlugin
  4. {
  5. public:
  6. virtual QString Hello() = 0;
  7. };
  8. Q_DECLARE_INTERFACE(IMyPlugin, "com.apple.im.plugin.IMyPlugin")

最后一行的Q_DECLARE_INTERFACE宏告诉Qt这个纯虚类是一个插件接口。
第一个参数是接口类名,第二个参数是插件标识符,标识符是大小写敏感的且必须是唯一的。

接着就是接口的具体实现了

[cpp] view plain copy

  1. class MyPlugin : public QObject, public IMyPlugin
  2. {
  3. Q_OBJEC
  4. Q_PLUGIN_METADATA(IID "com.google.myplugin" FILE "C:/a.json")
  5. Q_INTERFACES(IMyPlugin)
  6. public:
  7. virtual QString Hello() Q_DECL_OVERRIDE;
  8. };

实现类必须继承自QObject和插件接口类。Q_PLUGIN_METADATA宏用于描述插件元数据,第一个参数IID是必须的,同插件标识一样
而第二个参数FILE是可选的,指定一个本地json文件,该文件中可以描述插件的相关数据信息
(上面代码中指向的a.json内容为{"name":"jack", "age":18},稍后可以看到)

测试方法的实现没啥好说了,只是返回一个字符串

[cpp] view plain copy

  1. QString MyPlugin::Hello()
  2. {
  3. return "Hello";
  4. }

调用的话也比较简单,就是通过QPluginLoader类

[cpp] view plain copy

  1. {
  2. QPluginLoader loader("C:/MyPlugin.dll");
  3. if (loader.load())
  4. {
  5. QObject *obj = loader.instance();
  6. if (obj)
  7. {
  8. IMyPlugin *plugin = qobject_cast<IMyPlugin*>(obj);
  9. if (plugin)
  10. {
  11. // 测试插件方法
  12. qDebug() << plugin->Hello();
  13. // 输出插件元数据
  14. qDebug() << loader.metaData();
  15. }
  16. // 需要手动释放
  17. delete obj;
  18. }
  19. }
  20. }

最后运行结果如图

http://blog.csdn.net/aqtata/article/details/38986271

时间: 2024-10-25 11:22:52

制作Qt应用程序的插件(使用QtPlugin),对比DLL它是全平台通用的的相关文章

qt 添加程序插件目录

QApplication::addLibraryPath(QApplication::applicationDirPath());QApplication::addLibraryPath(QApplication::applicationDirPath()+"/plugins/");qt 添加程序插件目录

Qt中如何 编写插件 加载插件 卸载插件

Qt中如何 编写插件 加载插件 卸载插件是本文要介绍的内容.Qt提供了一个类QPluginLoader来加载静态库和动态库,在Qt中,Qt把动态库和静态库都看成是一个插件,使用QPluginLoader来加载和卸载这些库.由于在开发项目的过程中,要开发一套插件系统,就使用了Qt的这套类库. 一 编写插件 编写一个Qt的插件需要以下步骤 1.声明一个插件类, 2.定义一个类,实现这个插件类定义的接口,定义的这个类必须从QObject集成下来. 3.使用Q_INTERFACESQ_INTERFACE

Qt5的插件机制(1)--Qt 框架中的插件加载机制概述

概述 Qt的源码中通过 Q<pluginType>Factory.Q<pluginType>Plugin 和 Q<pluginType> 这三个类实现了Qt的插件加载机制, 这个机制可用于加载特定种类的插件.比如通过 QPlatformIntegrationFactory\QPlatformIntegrationPlugin\QPlatformIntegration 三个类可以实现平台类QPA插件(PlatformIntegration)的加载,通过QPlatformI

Qt 开发程序后的公布问题

Qt 开发程序后的公布问题 Qt 是一套跨平台 C++ 图形用户界面应用程序开发框架,利用它能够很方便的开发各种类型的应用程序.可是随着 Qt 的发展.功能越来越强大,公布时须要文件也越来越多.公布时把须要的文件挑出来就变得有些难度,好多刚開始学习的人花费了几天时间也没能让他的程序在别人的电脑上顺利的运行起来. 百度 "qt 程序公布" 能够找到一些文章.里面给出的方法都是自己一个个的把须要的文件找出来.事实上不须要这么费劲,Qt 里早就提供了一个小工具帮我们公布程序. 打开Qt 的安

Qt 开发程序后的发布问题

Qt 开发程序后的发布问题 Qt 是一套跨平台 C++ 图形用户界面应用程序开发框架,利用它可以非常方便的开发各种类型的应用程序.但是随着 Qt 的发展,功能越来越强大,发布时需要文件也越来越多.发布时把需要的文件挑出来就变得有些难度,好多初学者花费了几天时间也没能让他的程序在别人的电脑上顺利的运行起来. 百度 "qt 程序发布" 可以找到一些文章.里面给出的方法都是自己一个个的把需要的文件找出来.其实不需要这么费劲,Qt 里早就提供了一个小工具帮我们发布程序. 打开Qt 的安装路径,

使用NSIS制作Windows安装程序快速入门

使用NSIS制作Windows安装程序快速入门 这里使用的NSIS版本为3.04,HM NIS Edit版本为2.0.3. 制作安装程序的过程: 确定安装的功能和界面元素 编写 NSIS 脚本 使用 NSIS 提供的 makensis 或者 makensisw 程序,将步骤 2 编写的脚本编译成可执行的安装程序(点击HM NIS Edit编译按钮) 配置使用 NSIS 的环境 安装 NSIS 安装脚本编辑工具 HM NIS Edit 也可以使用VS Code安装NSIS脚本插件 使用HM NIS

让你的 Qt 桌面程序看上去更加 native(一共六篇)

<让你的 Qt 桌面程序看上去更加 native>是一个系列文章.在这个系列中,你将会了解到如何让你的 Qt 桌面应用程序看上去更加 native.这里,我假设你已经清楚如何使用 Qt 编写桌面应用程序,因为文章中大多都是所谓的“细节”,而有时候恰恰是这些“细节”决定着用户体验.同时,这里的程序都是指桌面程序,不包括各个嵌入式平台. 关于 Qt 的介绍这里就不再赘述.这里只说明一点,相比其他的 C++ UI库,Qt 的处理实际上更类似 Java 的 Swing.Qt 的大部分组件都是由自己的绘

制作PHP安装程序的原理和步骤56

1.制作PHP安装程序的原理和步骤检查目录或文件的权限----修改或填加配置文件---检查配置文件正 确性---导入数据库----锁定或删除安装文件 原理: 其实PHP程序的安装原理无非就是将数据库结构和 内容导入到 相应的数据库中,从这个过程中重新配置 连接数据库的参数和文件,为 了保证不被别人恶意使用安装文件,当安装完成后需要修改安装文件 .2制作安装用到的PHP函数is_writable(“data/config.php”);is_writable() 检查文件是否可写,用来判断文件权限,

Linux下Qt应用程序的发布(使用LDD命令查看所有依赖的库文件)

最近一直在学习Qt,用Qt写了一个程序,但是不知道怎么发布,网上说的都是在windows下怎么发布Qt应用程序,但是,在windows下Qt应用程序依赖的库文件与linux下的名字不同.于是,我就想到Linux下有没有这么一个命令,能够找到一个可执行文件运行时所依赖的库文件,百度一下,还真的有ldd命令. ldd的作用是打印可执行文件依赖的共享库文件,它是glibc的一部分: [email protected]:~# ldd --helpUsage: ldd [OPTION]... FILE..