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

简介: 《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*

相关文章
|
2月前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
67 8
C++ Qt开发:QTcpSocket网络通信组件
|
2月前
|
算法 编译器 Linux
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
57 0
|
11天前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
31 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
2天前
|
监控 Python
`pytest-qt` 是一个用于在 Qt 应用程序中进行 GUI 测试的 pytest 插件。
`pytest-qt` 是一个用于在 Qt 应用程序中进行 GUI 测试的 pytest 插件。
16 3
|
26天前
|
关系型数据库 MySQL 项目管理
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
|
26天前
|
SQL 关系型数据库 MySQL
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
|
26天前
|
SQL 数据可视化 关系型数据库
数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计
数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计
|
26天前
|
安全 BI 数据库
数据库大作业——基于qt开发的图书管理系统 (一)环境的配置与项目需求的分析
数据库大作业——基于qt开发的图书管理系统 (一)环境的配置与项目需求的分析
|
2月前
|
区块链
【qt】最快的开发界面效率——混合编程3
【qt】最快的开发界面效率——混合编程
50 1
|
2月前
【qt】最快的开发界面效率——混合编程2
【qt】最快的开发界面效率——混合编程
45 1