Qt5的插件机制(7)--插件开发示例代码(Lower-level API)

2023-11-16

插件代码

接口类头文件 MyPluginInterface.h

[cpp]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. #ifndef INTERFACES_H  
  2. #define INTERFACES_H  
  3.   
  4. #include <QtPlugin>  
  5.   
  6. #define QtPluginDemo_iid "org.qt-project.Qt.PluginDemo"  
  7.   
  8. class MyPluginInterface  
  9. {  
  10. public:  
  11.     virtual int add(int,int) = 0 ;  // 正确写法  
  12.     // virtual int add(int,int);    // 不太妥的写法(虽然这也是正确的虚函数声明语句)  
  13.         // 注:接口类中的虚函数都应有实体,或设置为0(推荐),这样  
  14.         // C++的编译器才能为接口类生成虚函数表。否则,如果没有实现  
  15.         // 接口类的虚函数也没有将其设为0,程序在在链接时可能会失败,  
  16.         // 或者链接成功但最后生成的库无法加载(库中有未定义的符号)  
  17. };  
  18.   
  19. Q_DECLARE_INTERFACE ( MyPluginInterface, QtPluginDemo_iid ) ;  
  20.   
  21. #endif  

插件头文件 MyPlugin.h

[cpp]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. #ifndef MYPLUGIN__H  
  2. #define MYPLUGIN__H  
  3.   
  4. #include <QObject>  
  5. #include <QDebug>  
  6. #include "MyPluginInterface.h"  
  7.   
  8.   
  9. class MyPlugin : public QObject, public MyPluginInterface  
  10. {  
  11.     Q_OBJECT  
  12.     Q_PLUGIN_METADATA ( IID QtPluginDemo_iid FILE "MyPlugin.json")  
  13.     Q_INTERFACES(MyPluginInterface)  
  14.   
  15. public:  
  16.     int add(int,int);  
  17. };  
  18.   
  19. #endif  

插件源文件 MyPlugin.cpp

[cpp]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. #include "MyPlugin.h"  
  2.   
  3. int MyPlugin::add(int a , int b)  
  4. {  
  5.     return a+b ;  
  6. }  
  7.   
  8. #include "moc_MyPlugin.cpp"  


JSON文件 MyPlugin.json,本示例中该文件是空的。

工程文件 MyPlugin.pro

[cpp]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. TEMPLATE      = lib  
  2. CONFIG       += plugin console  
  3. QT           += core  
  4. HEADERS       = MyPlugin.h MyPluginInterface.h  
  5. SOURCES       = MyPlugin.cpp  
  6. OTHER_FILES   = MyPlugin.json  
  7. TARGET        = MyPlugin  
  8. DESTDIR       = ./  
  9. INCLUDEPATH  += ./  
  10. # install  
  11. target.path = ./install  
  12. INSTALLS += target  



应用程序代码

接口类头文件 MyPluginInterface.h,该文件与插件代码中的一致。

主程序文件 main.cpp

[cpp]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. #include "MyPluginInterface.h"  
  2. #include <QtPlugin>  
  3. #include <QApplication>  
  4. #include <QWidget>  
  5. #include <QPluginLoader>  
  6. #include <QString>   
  7. #include <QtDebug>  
  8.   
  9. int main(int argc, char *argv[])  
  10. {  
  11.     QApplication app(argc, argv);  
  12.     QWidget w;  
  13.     QObject* object ;  
  14.     w.show();  
  15.       
  16.     app.addLibraryPath(QString("../MyPlugin/install")); // 添加库路径  
  17.     // 加载插件,取得实例  
  18.     QPluginLoader l(QString("MyPlugin")) ;  
  19.     //QPluginLoader l(QString("libMyPlugin.so")) ;  
  20.   
  21.     if ( (object=l.instance()) != NULL )  
  22.     {  
  23.         qDebug("plugin loaded .");  
  24.         // 使用插件  
  25.         int a = 14 , b = 23 ;  
  26.         MyPluginInterface* plugin = qobject_cast<MyPluginInterface*>(object) ;  
  27.         if (plugin)  
  28.             qDebug("%d + %d = %d",a,b,plugin->add(a,b));  
  29.     }  
  30.     else  
  31.     {  
  32.         qDebug("failed to load plugin !! ");  
  33.         QString errorStr = l.errorString();  
  34.         qDebug()<<errorStr;  
  35.     }  
  36.     return app.exec();  
  37. }  

MyApp.pro

[cpp]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. ######################################################################  
  2. # Automatically generated by qmake (3.0) ?? 11? 19 02:26:33 2014  
  3. ######################################################################  
  4.   
  5. TEMPLATE = app  
  6. QT += gui core widgets  
  7. CONFIG += console  
  8. TARGET = MyApp  
  9. INCLUDEPATH += .  
  10.   
  11. # Input  
  12. HEADERS += MyPluginInterface.h  
  13. SOURCES += main.cpp  


from: http://blog.csdn.net/newthinker_wei/article/details/41338447



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt5的插件机制(7)--插件开发示例代码(Lower-level API) 的相关文章

  • Kubernetes弃用Docker的由来和始末

    2020年12月初 Kubernetes在发布v1 20的时候重磅宣称将逐渐弃用Docker 一石激起千层浪 瞬间引爆容器圈 但没想到已经过去两个月时间了 还有文章用UC体误导吃瓜群众 还在学Docker Docker已死 额 累了 毁灭吧
  • mysql join 自己_用JOIN自己更新MySql

    HI我有查詢選擇了主鍵 id 1或外鍵 1的所有行 這是自己的連接 用JOIN自己更新MySql 選擇 SELECT f2 wz AS wz FROM d7x6r magazyn faktura zakupowa f LEFT JOIN S
  • 强化学习——基本概念

    什么是强化学习 强化学习关注与智能体 agent 如何与环境交互中不断学习以完成特定的目标 与有监督学习相比 不需要告诉智能体数据以及对应的标签 学习相应的模型 而是需要智能体在环境中一次次学习 哪些数据对应哪些标签 从而学习规律知道策略
  • Oracle 数据导入*.sql 提示ORA-01950

    今天执行远程Oracle 数据库数据导入时 提示ORA 01950 超出导入文件大小限制 cmd 远程连接oracle 数据库 sqlplus root root1234 192 50 68 246 orcl 导入指定位置的 sql文件 E
  • 双向广度优先搜索(介绍)

    双向广度优先搜索 广度优先搜索遵循从初始结点开始一层层扩展直到找到目标结点的搜索规则 它只能较好地解决状态不是太多的情况 承受力很有限 如果扩展结点较多 而目标结点又处在较深层 采用前文叙述的广度搜索解题 搜索量巨大是可想而知的 往往就会出
  • http请求 405错误

    http请求 405错误 方法不被允许 Method not allowed 405错误常常伴随着POST请求 所有有人会告诉你这些 但是时候他并不能解决你的问题 所以我说一点不一样的 假如你有一个user类 里面有两个属性userName
  • nat技术简介(转载)

    NAT Network Address Translation 网络地址转换 是将IP数据报文头中的IP地址转换为另一个IP地址的过程 在实际应用中 NAT主要用于实现私有网络访问公共网络的功能 这种通过使用少量的公网IP地址代表较多的私网
  • 快速搭建你的api数据交易平台-图文开发教程

    项目背景 如果你需要开发搭建自己的api数据交易平台 并且能在平台上面进行对客户管理 接口管理 套餐管理 账单管理 充值管理 那么下面将来介绍如何使用接口大师这个框架快速进行开发 安装 PhalApi专业版的运行环境要求如下 操作系统 Wi
  • nVidia TK1 基于深度学习框架 Caffe 的物体识别

    By Toradex 胡珊逢 1 简介 深度学习目前正吸引着越来越多人的关注 相关算法框架层出不穷 例如TensorFlow Caffe Keras CNTK Torch7等等 这些算法在数据分析 聚类 识别和预测方面提供了极大的帮助 因此
  • Python爬虫-某网酒店数据

    前言 本文是该专栏的第5篇 后面会持续分享python爬虫案例干货 记得关注 本文以某网的酒店数据为例 实现根据目标城市获取酒店数据 具体思路和方法跟着笔者直接往下看正文详细内容 附带完整代码 正文 地址 aHR0cHM6Ly93d3cuY

随机推荐

  • 基于核概念的KCCA算法

    基于核概念的KCCA算法 1 由CCA算法过渡至KCCA算法 2 KCCA算法的原理与推导 1 由CCA算法过渡至KCCA算法 典型相关分析 CCA 算法是一种标准的统计技术 用于寻找两个最大相关的随机向量的线性投影 CCA算法是一个计算两
  • 字符串初始化赋值

    在C语言中 字符串是当做字符数组来处理的 所以字符串有两种声明方式 一种是字符数组 一种是字符指针 1 直接逐个初始化字符数组 字符数组的初始化 最容易理解的方式就是逐个字符赋给数组中各元素 char str 10 I a m h a p
  • 单片机毕设项目分享 基于stm32的智能电子秤系统 - 物联网 嵌入式 单片机

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 4 1 STM32F103C8T6 4 2 HX711压力传感器 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目
  • Linux下安装jre

    原文链接 https blog csdn net qq 34368587 article details 79559102 个人收藏教程 侵权联系我删除 现需要项目部署到Linux中 需要配置java运行环境 注 以下测试环境系统为cent
  • 我看Java虚拟机(2)---Java虚拟机内存区域详解

    虚拟机内存区域的组成 直接上图 程序计数器 对于Java方法 用来选取下一条要执行的字节码 对于本地方法 值为空 线程独有 虚拟机栈 执行Java方法 每一层都是一个栈帧 栈帧包括局部变量表 操作数栈 动态链接和方法出口等信息 线程独有 本
  • Vue使用 dhtmlx-gantt 甘特图

    使用心得和一些坑分享出来 下载 npm install dhtmlx gantt save 创建 ganttVue 组件
  • React之生命周期-setState

  • supervisor入门教程

    supervisor是什么 是一个客户端 服务器系统 允许其用户在类UNIX操作系统上控制许多进程 官方解释 简单点来讲 就是一个监控脚本运行的工具 不过他可以统一化管理 laravel的队列文档上也有相关使用方式方法 例如 定时脚本的启动
  • YUV420数据格式详解

    YUV简介 YUV格式有两大类 planar和packed 对于planar的YUV格式 先连续存储所有像素点的Y 紧接着存储所有像素点的U 随后是所有像素点的V 对于packed的YUV格式 每个像素点的Y U V是连续交叉存储的 YUV
  • 无盘游戏服务器软件,安网卫士

    2018年10月12号更新说明 请注意此版本无后台 需要注册号及收银编码的请联系客服 服务端 1 更改默认备份目录 2 当客户机无SSD施工时在BV进行显示无硬盘 3 添加游戏时 支持拖动 4 删除游戏时 取消 删除客户机文件 选项 5 取
  • gcc中-c和-o参数

    c和 o都是gcc编译器的可选参数 c表示只编译 compile 源文件但不链接 会把 c或 cc的c源程序编译成目标文件 一般是 o文件 o用于指定输出 out 文件名 不用 o的话 一般会在当前文件夹下生成默认的a out文件作为可执行
  • 次表面散射

    专题介绍 在实时渲染和离线渲染领域 对场景模型表面以及空间介质的精细化建模是增加场景真实感的重要手段 计算机图形学领域的许多科研工作者设计出一系列复杂精巧的技术理论 模拟出光线从宏观世界到微观粒子的变化规律 本期专题精选了近年来关于微表面模
  • Android 11 Activity启动流程分析

    Android 11 Activity启动流程分析 本片文章是基于Android 11版本来分析应用Activity的启动的 Activity是Android四大组件中最重要的一个 因为我们所有的页面基本上都是基于Activity开发的 所
  • Spring Data JPA 讲解大全

    https yangbingdong com 2019 spring boot data jpa learning
  • Spring Boot干货系列:(七)默认日志logback配置解析

    原本地址 Spring Boot干货系列 七 默认日志logback配置解析博客地址 tengj top 前言 今天来介绍下Spring Boot如何配置日志logback 我刚学习的时候 是带着下面几个问题来查资料的 你呢 如何引入日志
  • Window 能访问某些网站,不能访问一些网的解决方法

    转自 http blog sina com cn s blog 53dd443a01014pfn html 这几天遇到一个奇怪的事 一台电脑能上google 也能上baidu 就是不能上微软 ping 微软也不行 当然 这个肯定不是公司防火
  • java附近的人_es6.2.4学习----java实现附近搜索(附近的人)

    阅读本文需先了解es对地理位置的处理 本文讲述java代码实现搜索附近的人的功能 第一步 创建可存储地理位置信息的索引 public static void createIndex throws IOException RestHighLe
  • 【Xilinx AX7103 MicroBalze学习笔记7】MicroBlaze AXI4 接口之 DDR 读写实验

    目录 AXI4 协议介绍 实验任务 硬件设计 Vivado 部分 自定义 IP MicroBlaze 配置 配置 PLL IP 配置 MIG IP 添加源文件 IP 软件设计 SDK 部分 lt
  • Spring MVC 拦截器执行时机

    一 准备工作 搭建好Spring MVC环境以后 我们创建一个拦截器 名为MyInterceptor并实现HandlerInterceptor接口 实现接口方法 便于观察我们只在控制台输出对应的方法名 package com jd inte
  • Qt5的插件机制(7)--插件开发示例代码(Lower-level API)

    插件代码 接口类头文件 MyPluginInterface h cpp view plain copy ifndef INTERFACES H define INTERFACES H include