《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*

相关文章
|
5月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
187 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
4月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
94 0
|
3月前
|
计算机视觉
基于QT的opencv插件框架qtCvFrameLearn实战
这篇文章详细介绍了如何基于Qt框架开发一个名为qtCvFrameLearn的OpenCV插件,包括项目配置、插件加载、Qt与OpenCV图像转换,以及通过各个插件学习OpenCV函数的使用,如仿射变换、卡通效果、腐蚀、旋转和锐化等。
46 10
|
3月前
|
C语言 C++ Windows
QT多插件通信框架CTK编译记录
本文记录了编译QT多插件通信框架CTK的过程,包括编译结果截图、部署配置、Log4Qt编译配置、参考链接和拓展资料。文中提供了详细的编译步骤和配置文件示例,以及相关的资源链接。
QT多插件通信框架CTK编译记录
|
3月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。
|
3月前
|
4月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
172 2
Qt开发网络嗅探器02
Qt开发网络嗅探器02
|
4月前
|
存储 运维 监控
Qt开发网络嗅探器01
Qt开发网络嗅探器01
|
4月前
|
网络协议 容器
Qt开发网络嗅探器03
Qt开发网络嗅探器03