Qt创建基于应用程序的插件

news2025/1/18 17:14:17

应用程序插件

  • 什么是插件
  • 插件的好处
  • 插件的种类
  • 应用程序插件
    • 创建应用程序的插件步骤:
    • 创建测试插件的应用程序步骤:
    • 应用程序插件示例
      • 开发环境
      • 创建示例
      • 生成插件
      • 运行结果
  • 总结

什么是插件

插件是一种用于应用程序功能扩展和增强,且按照特定规范编写的应用程序接口的程序。

插件的好处

可以用于应用程序的功能扩展,同时可在程序运行时动态的加载、卸载。
其相对于动态库而言,即使dll不存在,应用程序也可正常运行,只是插件的功能不能使用。
动态库需要访问lib文件,且必须保证dll存在,否则程序无法正常启动。

插件的种类

Qt插件就相当于一个共享库。但是由于动态库又一定的区别。
在Qt插件中,可以分为两种:

1. 用于应用程序扩展的插件,也叫低级的API;
2. 用于Qt自身扩展,也称为高级API。如自定义数据库驱动,文本编码,图片格式和自定义样式等。

本文主要讲解基于应用程序扩展的低级API,即应用程序插件。

应用程序插件

创建应用程序插件,分为两部分:一部分创建应用程序的插件;
一部分创建测试,也就是使用插件的应用程序。

创建应用程序的插件步骤:

  1. 继承QObject和接口类,实现接口类中的功能函数;
  2. 使用Q_PLUGIN_METADATA()宏向元对象系统注册接口类;
  3. 使用Q_INTERFACES()宏导出插件;
  4. 编写能够生成插件的pro文件。
    注意:这里的接口类实际是一个内部含有纯虚函数的抽象类。C++中没有接口类一说。以下本文中的所有接口类指的都是抽象类。

创建测试插件的应用程序步骤:

  1. 创建一个接口类;
  2. 使用Q_DECLARE_INTERFACE()宏在Qt元对象系统中注册接口类;
  3. 使用插件加载器QPluginLoader加载插件;
  4. 使用qobject_cast()来测试插件是否实现了给定功能。

应用程序插件示例

开发环境

在这里插入图片描述
我这里是基于Qt6.6.0,且使用的是QtCreator编译时使用的MSVC2019 64bit的编译器。
这个是为了后续的基于Qt自身的插件,专门更改的环境。

创建示例

首先打开QtCreator,点击菜单栏的文件-》新建项目,弹出如下弹窗:
在这里插入图片描述
选择项目中的其它项目,对应的子目录项目,点击选择按钮,弹出如下弹窗:
在这里插入图片描述
在名称后面的编辑框输入项目文件夹的名称MyPlugin,同时在创建路径的编辑框中选择要将文件存储的位置(自己选择就行,路径中不能含有中文),点击下一步按钮,弹出如下弹窗:
在这里插入图片描述
勾选要使用的编译器,我这里选择的是Qt6.6.0 MSVC2019 64bit的编译器,点击下一步。弹出如下弹窗:
在这里插入图片描述
点击完成&添加子项目按钮。弹出如下弹窗:
在这里插入图片描述
选择其他项目下的子目录项目,点击选择按钮,图中红色的线已经圈出。弹出如下:
在这里插入图片描述
输入子项目的名称Plugin,选择创建路径,一般这里的路径采用默认的方式,为之前创建的子目录项目MyPlugin所在的路径下创建子项目。之后,点击下一步,弹出弹窗:
在这里插入图片描述
点击完成&添加子项目按钮。会继续弹窗如下的弹窗:
在这里插入图片描述
点击取消按钮。
至此插件项目的项目文件夹Plugin有了,还需创建使用插件的应用程序的项目。
在项目文件夹MyPlugin上点击右键,弹出菜单栏,选择创建新子项目,弹出:
在这里插入图片描述
选择Application(Qt)——》Qt Widgets Applicatin,创建基于Qt的应用程序。这个程序用于最终插件的测试,也就是使用插件的程序。点击选择按钮。弹出:
在这里插入图片描述
输入项目名称PluginWindow,创建路径采用默认的即可,这里都默认路径为创建子目录项目时的路径,也就是创建的插件项目Plugin和应用程序项目PluginWindow都是MyPlugin的子目录项目。点击下一步按钮,弹出弹窗:
在这里插入图片描述
继续点击下一步按钮,弹出弹窗:
在这里插入图片描述
这里使用默认的也行,本示例代码提供的是基于QWidget的应用程序,创建基于Qt的应用程序,这不是本文的重点。点击下一步按钮。弹出弹窗后,继续点击下一步按钮,弹出:
在这里插入图片描述
这里需要勾选与插件项目一样的编译器选项,反正就是选择一样的编译器就行,我这里依旧还是Qt6.6.0 MSVC2019 64bit编译器。点击下一步按钮。弹出弹窗后,点击完成按钮。
此时可以看到项目的结构类似于如下所示这样:
在这里插入图片描述
展开后是类似下面这样的:
在这里插入图片描述
此时,插件项目Plugin中只有一个pro文件,将来使用插件的应用程序PluginWindow中也缺少一个接口类文件。
这个项目结构的截图只是提供了创建一个插件和使用插件的应用程序的整个创建步骤中的一个环节,并非本示例创建过程中对应的项目结构。

接下来向使用插件的应用程序项目PluginWindow添加接口类。
在基于Qt创建的应用程序项目PluginWindow上,右键出现菜单,选择添加新文件,弹出:
在这里插入图片描述
选择C/C++——》C/C++ Header File,然后点击选择按钮,弹出:
在这里插入图片描述
输入文件名,即抽象类的类名PluginInterface,也是接口类,路径默认就可以,点击下一步按钮。然后再在弹出窗口中点击完成按钮。此时使用插件的应用程序项目下新增一个头文件。如下:
在这里插入图片描述
接下来在插件类项目Plugin的pro文件中修改器内容为下(如果不修改pro文件,这里无法添加新文件,需先修改pro文件):

CONFIG      += plugin debug_and_release
TARGET      = $$qtLibraryTarget(myPlugin)
TEMPLATE    = lib
INCLUDEPATH += ../PluginWindow
DESTDIR = ../Plugins

然后在该插件项目Plugin上右击,弹出菜单中选择添加新文件,弹出:
在这里插入图片描述
选择C/C++——>C/C++ Class,点击选择按钮。弹出:
在这里插入图片描述
输入类名Plugin,会在下面的头文件和源文件处生成对应的文件名plugin.h,plugin.cpp,不用选择基类,当然这里可以手动输入之前在使用插件的应用程序中创建的接口类的类名PluginInterface作为基类,同时勾选Include QObject,点击下一步按钮,弹出的弹框中点击完

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1588015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【应急响应事件】记一次矿机木马事件

事情起因,是因为实验室有一台服务器的占用率从开机启动就是100%,很怀疑就是中了某种矿机木马,拿去挖矿了,然后经过师兄的不懈努力,终于找到了木马文件,给他命名为virus_sample 然后我就拿着样本去逆了 木马…

Centos7在线安装mysql5.7

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 安装Mysql yum源1、卸载旧环境2、下载mysql yum源3、上传到自己服务器1)、上传源2)、安装yum源3)、查看yum源是否安装成功 安装M…

【Java核心技术】第3章 Java的基本程序设计结构

1 数据类型 Java一共有8种数据类型: 4种整型 类型存储需求int4字节short2字节long8字节byte1字节 2种浮点型 类型存储需求float4字节double8字节 1种字符型 1种布尔型 2 变量声明 2.1 局部类型推断 如果可以从变量的初始值推断变量类型,只需要使用…

Linux网络基础2(下)

传输层 再谈端口号端口号的划分netstatpidof UDP协议 UDP的特点UDP缓冲区UDP使用注意事项UDP报头的理解基于UDP的应用层协议 TCP协议 4位首部长度16位窗口大小确认应答机制32位序号和32位确认序号6个标记位超时重传机制连接管理机制流量控制快重传机制再谈序号延迟应答面相字节…

Day16_学点儿JavaEE_实践_基于IDEA2023的简易JavaWeb项目、Tomcat输出乱码解决

0 JavaWeb项目目录 └──JavaWeb├──resources│ └──db.properties├──src│ └──com.sdust.web│ ├──servlet│ │ └──StudentServlet│ ├──pojo│ │ └──Student│ └──util│ └──JDBCUtil├──web│ ├──st…

电商技术揭秘十三:云计算在电商中的应用场景

相关系列文章 电商技术揭秘一:电商架构设计与核心技术 电商技术揭秘二:电商平台推荐系统的实现与优化 电商技术揭秘三:电商平台的支付与结算系统 电商技术揭秘四:电商平台的物流管理系统 电商技术揭秘五:电商平台…

百科引流攻略|小马识途分享百科营销的五个技巧

纵观整个互联网领域,国内几大巨头百度、抖音、腾讯都布局了自身的百科平台,百科营销也始终作为网络营销一个重要分支而存在。很多人都知道百科营销是品牌背书的一把王牌,但很少有人提及百科营销的引流作用。 有人可能会说,百科词条…

[数据结构]—二叉树基本概念

1.树概念及结构 1.树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点&#xff…

老房改造系列--如何用一套流程接入所有业务线

ToB业务没有太多高并发的挑战,但同一套流程往往可能需要承载各种差异化的复杂业务需求,所以如何让系统具备良好的扩展性成为ToB业务系统最大的挑战。本文将详细讲述如何用一套流程接入所有业务线? 老系统改造不是一蹴而就的,从20…

【自用笔记】【大数据】

1 mapreduce (1)Map任务的数量:由输入数据的大小决定的,如文件数量和大小、HDFS块大小以及FileInputFormat的设置等。每个MapSlot可以运行一个Map任务 (2)Reduce任务的数量(分区数)&…

想走?可以!先买票--迭代器模式

1.1 乘车买票,不管你是谁! 售票员检查谁没有买票,把车厢里的人都遍历一遍。 1.2 迭代器模式 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示…

[CSS]布局

盒子就是把网站分割成一小块一小块的吧,然后方便移动或者管理 背景 属性名描述background-color设置元素的背景颜色。background-image设置元素的背景图片。背景图片与背景颜色同时设置时,则图片覆盖颜色。写法如下:background-image: url(&…

【洛谷 P4017】最大食物链计数 题解(深度优先搜索+动态规划+邻接表+记忆化搜索+剪枝)

最大食物链计数 题目背景 你知道食物链吗?Delia 生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条。于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧。 题目描述 给你一个…

【Java核心技术】第4章 对象与类

1 面向对象 2 自定义类 形式: class ClassName { field // 字段 constructor // 构造器(构造函数) method // 方法 } 如: class Employee {private String name;private double salary;private LocalDate hireDay;public Emp…

【拓展技术】——AutoDL服务器训练Pycharm使用注意点Pycharm配置AutoDL

一、AutoDL服务器模型训练 AutoDL是一个为研究人员、开发者和企业提供的平台,它致力于提供一个高效、可靠和易用的环境,以支持复杂的计算任务和AI模型的部署: 高效的并行计算资源:AutoDL拥有强大的计算集群和高性能的计算节点&a…

MySOL之旅--------MySQL数据库基础( 2 )

本篇碎碎念:尽自己最大的努力,直到筋疲力尽为止,加油 今日份励志文案: 别人都在前进,我为什么要停下 目录 补上一条博客缺失的内容 常用数据类型 数值类型: 字符串类型: 日期/时间类型: 二进制类型: 其他类型: …

工业4G路由器SR500护航清远市智慧环卫项目

一、项目背景 随着智慧城市建设的不断推进,清远市政府高度重视城市环卫管理的智能化升级。由于清远地处山区,环卫作业路线长、工作环境复杂,有效监控和调度成为亟待解决的难题。 经过严格筛选,清远市最终选定了星创易联科技的SR500双网口4G工业路由器,与环卫车载智能终端配合使…

BM25和语言模型的改进研究

原文链接: BM25和语言模型的改进研究 摘要: 近期关于搜索引擎排名函数的研究报告指出,BM25和带Dirichlet平滑的语言模型有所改进。本研究通过在INEX 2009维基百科语料库上训练,然后在INEX 2010和9个TREC语料库上测试&#xff0…

ffmpeg命令与批处理编程

(一) CMD脚本查找所有文件 powershell与cmd转换 powershell与cmd虽然同为windows命令,但许多命令并不通用。 CMD换行符 a 在CMD下,可以用^作为换行符,类似于Linux下的\。举例如下: start pemu.exe ^ -net nic,vlan1,macaddr…

低功耗接地故障中断器D4145,无需任何电位计符合 U.L.943 标准,直接连接至SCR

概述: D4145 是交流电源插座接地故障中断器的低功率控制器。 在发生有 害或致命冲击前,这些器件检测是否有危险的接地情况,比如设备( 与 AC 线路反相连接) 与水以及与裸露电线接触。内含一个 26V 齐纳并联稳压 器、 一个运算放大器和一个…