《QT从基础到进阶·三十三》QT插件开发QtPlugin

插件和dll区别:
插件
插件主要面向接口编程,无需访问.lib文件,热插拔、利于团队开发。即使在程序运行时.dll不存在,也可以正常启动,只是相应插件功能无法正常使用而已;
调用插件中的方法只要dll即可,不需要头文件和lib文件(可以把头文件放进来,不然不知道具体接口)

动态库
动态库需要访问.lib文件,而且在程序运行时必须保证.lib存在,否则无法正常启动;

QPluginLoader::load()方法返回false的一些解决办法:
(1)在环境变量加QT_DEBUG_PLUGINS = 1, 可以查看一些打印信息
在这里插入图片描述
(2)接口实现类没有Q_OBJECT
(3)进行了Q_PLUGIN_METADATA的声明,但是json文件格式错误
(4)出现PluginLoader returns a QObject instance, but qobject_cast returns null (0x0)此问题
原因1: 接口文件不统一 Q_DECLARE_INTERFACE的id不一样
(5)pluginLoader.errorString()查看错误信息
(6)该项目下依赖的外部库dll在编译的时候没有放到debug目录下

插件一些注意事项:
(1)关闭程序时插件是否自动析构插件内的所有对象取决于

 //QPluginLoader 加载插件名(直接声明对象在关闭程序时自动析构所有插件,如果声明对象指针则需要手动析构所有插件)
QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));

插件创建流程:
(1)写一个抽象类,把用到的插件方法抽象成纯虚函数,抽象类要加上虚析构。
(2)抽象类中需要声明一个插件的唯一标识,例如:
#define AbstractInterface_iid “log plugin”
(3)声明接口,Q_DECLARE_INTERFACE 宏告诉Qt 这个纯虚类是一个插件接口类,例如:
Q_DECLARE_INTERFACE(LogPlugin, AbstractInterface_iid)
在这里插入图片描述
(4)插件实现类需要继承QObject和抽象类,宏Q_INTERFACES(LogPlugin)把插件注册到QT元对象系统中,宏Q_PLUGIN_METADATA导出插件和包含插件的json信息
在这里插入图片描述

插件中信号槽的使用:
插件是一个接口类,里面都是纯虚函数,正常不用继承QObject,也不用加Q_OBJECT
声明一个信号:(接口类中把信号声明为纯虚函数,不用加signals:),槽函数同理
在这里插入图片描述

实现类中要加上signals:并重写updateTabWidgetPage,这里是信号所以没有具体实现,然后直接在实现类中发信号即可,槽函数同理,但槽函数有具体实现。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

信号槽连接需要把插件类转为QObject*
在这里插入图片描述

在这里插入图片描述

📢博客主页: 主页
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 梦回阑珊 原创,首发于 CSDN,转载注明出处🙉
📢代码改变世界,你来改变代码!✨

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【软件测试】接口测试中Post方法怎么测?

GET方法和POST方法传递数据的异同 http请求方法get和post是最常被用到的两个方法,get常用于向服务器请求数据,post常用于提交数据给服务器处理。 GET方法其实也可以传递少量的数据。 但它存在以下问题: 1)GET 方法不包含body,因此…

新手买电视盒子哪个好?数码粉实测电视盒子排名

新手们在买电视盒子时面对众多的品牌和机型,往往不知道电视盒子哪个好,我作为资深数码粉,已经买过十来款电视盒子了,近来某数码论坛公布了最新的电视盒子排名,我购入后进行了一周的深度实测,结果如何&#…

Java-整合OSS

文章目录 前言一、OSS 简介二、OSS 的使用1. Bucket 的创建与文件上传2. 创建 RAM 与用户授权3. 图形化管理工具-ossbrowser 三、Java 整合 OSS1. 基本实现2. 客户端直传 前言 最近公司的技术负责人让我整合下 OSS 到项目中,所以花了一点时间研究了下 OSS&#xff…

Redis内存淘汰机制

Redis内存淘汰机制 引言 Redis 启动会加载一个配置&#xff1a; maxmemory <byte> //内存上限 默认值为 0 (window版的限制为100M)&#xff0c;表示默认设置Redis内存上限。但是真实开发还是需要提前评估key的体量&#xff0c;提前设置好内容上限。 此时思考一个问题…

高质量发展项目——党务工作者能力提升培训在京成功举办

2021年6月&#xff0c;国务院办公厅印发了《关于推动公立医院高质量发展的意见》。为认真贯彻落实公立医院党建工作重点任务&#xff0c;加强公立医院党建&#xff0c;健全现代医院管理制度&#xff0c;实行党委领导下的院长负责制。发挥院级党组织把方向、管大局、作决策、促改…

flutter仿支付宝余额宝年化收益折线图

绘制: 1.在pubspec.yaml中引入:fl_chart: 0.55.2 2.绘制: import package:jade/utils/JadeColors.dart; import package:util/easy_loading_util.dart; import package:fl_chart/fl_chart.dart; import package:flutter/material.dart; import package:flutter_screenutil/…

MySQL分页查询的工作原理

前言 MySQL 的分页查询在我们的开发过程中还是很常见的&#xff0c;比如一些后台管理系统&#xff0c;我们一般会有查询订单列表页、商品列表页等。 示例&#xff1a; SELECT * FROM goods order by create_time limit 0,10; 在了解order by和limit的工作原理之前&#xff0c…

[DB] (数据库工具) navicat 平替 jookdb

jookdb 官方下载 csdn下载(免积分) 解压后直接可以使用 测试数据库适配性. mysql.mariadb.oracle.sqlserver免费使用 除外的提供20天免费试用驱动添加是java的jdbc驱动,可以通过 https://developer.aliyun.com/mvn/view 进行下载数据库的基本操作.包含数据库的新增, 库表新增…

SQLSERVER 遍历循环的两种方式很详细有源码(1)

1.普通循环 Create table WS_Student ( [Id] int primary key not null, [My_Cocode] [int], [My_SCocode] [int], [userId] [bigint], [SetCName] [varchar](50) NULL, [SetEName] [varchar](50) NULL, [SetPcode] [varchar](50) NULL, [Se…

单相浪涌保护器和三相浪涌保护器的区别

浪涌保护器&#xff0c;也称为防雷器&#xff0c;是一种为各种电子设备、仪器仪表、通讯线路提供安全防护的电子装置&#xff0c;主要用于限制过电压和泄放电涌电流。浪涌保护器的核心元件是内部的一个非线性元件。根据非线性元件的不同&#xff0c;浪涌保护器可以分为开关型&a…

​如何使用ArcGIS Pro制作渐变河流效果

对于面要素的河流水系&#xff0c;制作渐变效果方法比较简单&#xff0c;如果是线要素的河流有办法制作渐变效果吗&#xff0c;答案是肯定的&#xff0c;这里为大家介绍一下制作方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的水系数…

kubernetes部署jenkins

参考&#xff1a; ​​​​​​第七篇&#xff1a;kubernetes部署jenkins-CSDN博客 1、当前kubernetes集群已部署nfs服务 showmount -e 创建jenkins目录 2、添加jenkins的pvc cd /opt/dockerfile/jenkins/ touch jenkins-pv.yaml apiVersion: v1 kind: PersistentVolume m…

软件测试/人工智能丨深入人工智能软件测试:PyTorch引领新时代

在人工智能的浪潮中&#xff0c;软件测试的角色变得愈发关键。本文将介绍在人工智能软件测试中的一些关键技术&#xff0c;以及如何借助PyTorch深度学习框架来推动测试的创新与升级。 PyTorch&#xff1a;深度学习的引擎 PyTorch作为一种开源的深度学习框架&#xff0c;为软件…

【2021集创赛】Arm杯二等奖-基于Arm核的智慧病房手势识别方案

团队介绍 参赛单位&#xff1a;上海交通大学 队伍名称&#xff1a;芯灵手巧 指导老师&#xff1a;王琴、景乃锋 参赛队员&#xff1a;林圣凯、林新源、莫志文 总决赛奖项&#xff1a;二等奖 1.项目概述 1.1 选题背景 我们的选题背景是考虑到很多卧床病人不便于独自向医护人…

.NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试

2023年11月15日&#xff0c;对.net的开发圈是一个重大的日子&#xff0c;.net 8.0正式版发布。 圈内已经预热了有半个月有余&#xff0c;性能不断超越&#xff0c;开发体验越来越完美&#xff0c;早在.net 5.0的时候就各种吹风Aot编译&#xff0c;直到6.0 7.0使用仍然比较麻烦…

比一比国内的现货白银交易所

上海黄金交易所(SGE)是国内最大的白银交易平台之一。它作为中国金融期货市场的重要组成部分&#xff0c;能够提供完善的交易机制和规范的交易环境。SGE的交易品种丰富&#xff0c;包括现货白银&#xff0c;白银延期等的多种交易方式。SGE也具有较高的流动性和交易深度&#xff…

WireGuard 组网教程:快速构建安全高效的私密网络并实现内网穿透

文章目录 1 引言1.1 什么是WireGuard1.2 WireGuard可以用来做什么1.3 WireGuard原理1.4 WireGuard安装 2 WireGuard组网实现内网穿透2.1 前提条件2.2 网络拓扑结构2.3 具体步骤2.3.1 中继服务器配置2.3.2 其他peer2.3.3 测试 2.4 WireGuard配置文件说明 3 WireGuard工具3.1 wg-…

Numpy数组进阶_Python数据分析与可视化

Numpy数组进阶 Numpy的广播机制高级索引整数数组索引布尔索引花式索引 数组迭代 Numpy的广播机制 广播 (Broadcast) 是 numpy 对不同形状 (shape) 的数组&#xff0c;进行数值计算的方式。 对数组的算术运算通常在相应的元素上进行&#xff0c;当运算中的 2 个数组的形状不同时…

轻松实现文件改名:让新文件名与目录名称一致

在日常工作中&#xff0c;我们经常需要处理文件改名的问题。有时候&#xff0c;我们需要将新文件名设置为与目录名称相同&#xff0c;以方便管理和查找。然而&#xff0c;这个过程可能很繁琐&#xff0c;尤其是当你有大量的文件需要改名时。幸运的是&#xff0c;现在有一种简单…

Windows2019部署IIS后,浏览文件变成下载的问题解决过程

1、反复重起服务器、重建应用程序、建应用程序并改名才好使&#xff01; 2、总体上&#xff0c;角色为&#xff1a; 一、在Windows2019服务器上&#xff0c;填加角色&#xff0c;一路下一步&#xff0c;到填加服务器角色时&#xff0c;勾选了【Web服务器(IIS)】 二、然后在【…
最新文章