有关Qt插件的讲解(Plugin)——底层插件API 扩展Qt应用程序(工厂模式)--1书写插件

本文详细介绍了如何使用Qt的底层插件API(低等级插件)来扩展应用程序,特别是在工程领域中针对不同型号产品定制插件的场景。通过工厂模式,一个插件可以创建多个实体同时工作。内容包括项目背景、官方指导的低等插件解释、定义接口、编写插件类、使用Q_PLUGIN_METADATA宏和构建插件.pro文件的步骤。
摘要由CSDN通过智能技术生成

这篇是接上一篇的下文,来讲解Qt Plugin系统的另一部分,低等级插件(其实叫低等插件就会感觉这个插件有些低级,但是我用起来感觉并不低级哈,或者翻译成底层插件更合适一个吼,所以我还是把他称作程序扩展插件或插件(本文提到的插件都是低等插件)吧。),这可能是用的更广泛的一种?Maybe。如果是在工程领域的话应该这种用的比较常见,作为应用程序的补充动态库来用。

虽然说是低等级插件,我觉得他用起来比高等级插件更难一些,不像高等级插件很多东西Qt已经写好了,低等级插件工厂模式还要自己去写。
先介绍一下我们项目吧

项目背景

我们项目是做一个高端可编程传感系统的自动化测试系统,用来测试这个传感系统相关指标是否达标了。并输出报告等功能。
由于工厂产的传感系统有不同型号,每个型号的指标和通讯协议都不甚相同,所以给每个型号定制一个插件是有必要的,当测这个型号的时候软件就加载则个型号的插件做相应的测试,做另一个型号的时候就加载另一个插件。
一个型号的产品可能同时会测多个,可能有16个这么多,所以用Qt官方指导那种普通的程序扩展插件就不是很合理了(后面会进行讲解),指导中程序扩展插件是加载一个用一个,而我们需要从一个插件中,生成16个实体,这里的话就要用到工厂模式(和高等级插件的factory是一种,Qt好像并没有吧工厂模式显示的暴露出来,我写上一篇的时候找了好久才找到源码),通过一种插件,create出16个实体同时工作(多线程的问题以后再讲)。

官方指导中的低等插件讲解

以下是官方文档的解释:
不仅Qt本身,Qt应用程序也可以通过插件进行扩展。这要求应用程序使用QPluginLoader检测和加载插件。在这种情况下,插件可以提供任意功能,并且不限于数据库驱动程序、图像格式、文本编解码器、样式以及扩展Qt功能的其他类型的插件。

通过插件使应用程序可扩展包括以下步骤:

  1. 定义一组用于与插件对话的接口(仅具有纯虚拟函数的类)//这里也可以不是“仅”具有纯虚函数的类
  2. 使用Q_DECLARE_INTERFACE()宏告诉Qt的元对象系统该接口。
  3. 在应用程序中使用QPluginLoader加载插件。
  4. 使用qobject_cast()测试插件是否实现给定接口。

编写插件包括以下步骤:

  1. 声明一个插件类,该类继承自QObject和插件想要提供的接口。
  2. 使用Q_INTERFACES()宏告诉Qt的元对象系统有关接口的信息。
  3. 使用Q_plugin_METADATA()宏导出插件。
  4. 使用合适的方法构建插件.pro文件。

然后按照步骤依次讲解

定义一组用于与插件对话的接口(EchoInterface)(仅具有纯虚拟函数的类)//这里也可以不是“仅”具有纯虚函数的类

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值