Qt制作应用插件
在Qt下,插件有两种形式,一种是用于QtCreator下,扩展IDE功能。另一种是用于扩展开发者的应用。本文要讲的是后者。
定义一个纯虚类作为插件接口
- #include <QtPlugin>
- #include <QString>
- class IMyPlugin
- {
- public:
- virtual QString Hello() = 0;
- };
- Q_DECLARE_INTERFACE(IMyPlugin, "com.apple.im.plugin.IMyPlugin")
最后一行的Q_DECLARE_INTERFACE宏告诉Qt这个纯虚类是一个插件接口。
第一个参数是接口类名,第二个参数是插件标识符,标识符是大小写敏感的且必须是唯一的。
接着就是接口的具体实现了
- class MyPlugin : public QObject, public IMyPlugin
- {
- Q_OBJEC
- Q_PLUGIN_METADATA(IID "com.google.myplugin" FILE "C:/a.json")
- Q_INTERFACES(IMyPlugin)
- public:
- virtual QString Hello() Q_DECL_OVERRIDE;
- };
实现类必须继承自QObject和插件接口类。Q_PLUGIN_METADATA宏用于描述插件元数据,第一个参数IID是必须的,同插件标识一样
而第二个参数FILE是可选的,指定一个本地json文件,该文件中可以描述插件的相关数据信息
(上面代码中指向的a.json内容为{"name":"jack", "age":18},稍后可以看到)
测试方法的实现没啥好说了,只是返回一个字符串
- QString MyPlugin::Hello()
- {
- return "Hello";
- }
调用的话也比较简单,就是通过QPluginLoader类
- {
- QPluginLoader loader("C:/MyPlugin.dll");
- if (loader.load())
- {
- QObject *obj = loader.instance();
- if (obj)
- {
- IMyPlugin *plugin = qobject_cast<IMyPlugin*>(obj);
- if (plugin)
- {
- // 测试插件方法
- qDebug() << plugin->Hello();
- // 输出插件元数据
- qDebug() << loader.metaData();
- }
- // 需要手动释放
- delete obj;
- }
- }
- }
最后运行结果如图
http://blog.csdn.net/aqtata/article/details/38986271
Qt制作应用插件的更多相关文章
- Qt编写自定义控件插件路过的坑及注意事项
在一日一控件的口号下,终于写好了五十几个自定义控件,包括各种仪表盘,各种温度计,各种进度条,各种按钮等,具体可参见(http://www.cnblogs.com/feiyangqingyun/p/61 ...
- Qt 制作安装包
Qt 制作在线.离线 安装包 见如下文档
- Qt之自定义插件(for Qt Designer)
之前Blog里面有关于QWT的编译.配置.使用的文章,分别是在VS与Creator下进行的. QWT编译.配置.使用(VS2010 + Qt5.1.0). QWT编译.配置.使用(Qt Creator ...
- Qt制作Aero特效窗口
转载请注明链接与作者huihui1988 初学QT,边看书边自己做点小东西.最近突然心血来潮,想自己做个小巧点的,界面美观一点的备忘当桌面上.想了半天,发现VISTA/WIN7的Aero效果就不错,况 ...
- 使用python制作ArcGIS插件(5)其他技巧
使用python制作ArcGIS插件(5)其他技巧 by 李远祥 使用python做插件开发,除了了解ArcToolBox工具之外,还需要在了解ArcPy的相关函数和接口.只有掌握了这些,才可以顺利的 ...
- 使用python制作ArcGIS插件(4)界面交互
使用python制作ArcGIS插件(4)界面交互 by 李远祥 插件界面部分,除了一开始在设计器中设计的这些界面元素之外,还可以与操作系统进行一些输入输出的交互,这部分的实现全部在pythonadd ...
- 使用python制作ArcGIS插件(3)ArcPy的使用说明
使用python制作ArcGIS插件(3)ArcPy的使用说明 by 李远祥 ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting 功能进而构 ...
- 使用python制作ArcGIS插件(2)代码编写
使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...
- 使用python制作ArcGIS插件(1)工具介绍
使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...
随机推荐
- Domain(AD) 管理
新建账户 文件夹权限管理
- Linux: 信息查看
Linux log日志查看 http://www.2cto.com/os/201307/227230.html
- arm汇编:ldr,str,ldm,stm,伪指令ldr
ldr,str,ldm,stm的命名规律: 这几个指令命名看起来不易记住,现在找找规律. 指令 样本 效果 归纳名称解释 ldr Rd,addressing ldr r1,[r0] addressin ...
- javascript每日一练(七)——事件二:键盘事件
一.键盘事件 onkeydown触发, keyCode键盘编码 ctrlKey altKey shiftKey 键盘控制div移动 <!doctype html> <html> ...
- 【转】linux命令useradd添加用户详解
在linux中增加用户我们使用useradd命令而删除用户直接使用userdel即可了,下面小编来给各位同学介绍一下在linux中添加与删除用户方法吧. 1.作用 useradd或adduser命 ...
- 四、Nginx负载均衡upstream
user www; worker_processes ; error_log /usr/local/nginx/logs/error.log crit; pid /usr/local/nginx/lo ...
- SignalR系列教程:服务器广播与主动数据推送
本篇是本系列入门篇的最后一遍,由于工作关系,接触SignalR的时间不是很多.等下次有空的话我会写一个利用“SignalR”开发一个在线聊天室的系列博文.近期的话我更偏向于更新框架设计相关的文章,到时 ...
- Windows Phone 8初学者开发—第22部分:用演示图板创建卷盘的动画
原文 Windows Phone 8初学者开发—第22部分:用演示图板创建卷盘的动画 第22部分: 用演示图板创建卷盘的动画 原文地址:http://channel9.msdn.com/Series/ ...
- Android 去掉Activity的跳转动画
startActivity或finish的时候调用一句话即可: overridePendingTransition(0, 0);
- Java中抽象类和接口区别
在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...