首页 » 软件开发 » QT学习笔记三 之 插件开发(接口插件定义开发继承)

QT学习笔记三 之 插件开发(接口插件定义开发继承)

萌界大人物 2024-07-24 07:16:29 0

扫一扫用手机浏览

文章目录 [+]

惯例就是坚持 - 介绍

插件(Plug-in,又称addin、add-in、addon或add-on,又译外挂)是一种遵循一定规范的应用程序接口编写出来的程序(来自百度百科)

QT插件(https://doc.qt.io/qt-5/plugins-howto.html)有继承QT提供的接口用以扩展QT即所谓的High_Level, 继承用户自定义接口用以扩展应用程序的Low_Level。
大多数情况我们都是依据特定项目需求自定义接口实现插件式开发
QT的插件式操作流程是

QT学习笔记三 之 插件开发(接口插件定义开发继承) 软件开发
(图片来自网络侵删)
定义接口(定义了纯虚函数的类) 及 Q_DECLARE_INTERFACE声明接口(注意标示符必须是唯一的)定义插件类继承QObject和接口Q_INTERFACE()告诉QT实现哪个接口 和 Q_PLUGIN_METEDATA()向Metadata声明供QPluginLoader调用QPluginLoader加载插件并使用qobject_cast转换。

考虑:[what]在使用qobject_cast转换为接口指针时,如果需要connect信号和槽该怎么操作?因为信号和槽必须为QObjcet,而接口是没有继承QObject的[打脸]。

定义接口头文件及插件头文件:

#define IID_ILOG "org.genggang.com.ilog"class ILog{public: virtual ~ILog() {} virtual void ShowLog(QString from, LOG_LEVEL level, QString info){}};Q_DECLARE_INTERFACE(ILog, IID_ILOG)

#include <QObject>#include <QtPlugin>#include <ILog.h>class LogManager : public QObject, public ILog{ Q_OBJECT Q_PLUGIN_METADATA(IID IID_ILOG) Q_INTERFACES(ILog)public: void ShowLog(QString from, LOG_LEVEL level, QString info);};

插件类中QObject必须在第一位置。
实现各个方法,插件开发完成。

小Tip [得意] -> 编译动态库或静态库,只需要在.pro项目配置里删除或增加CONFIG += staticlib即可。

回到上面提到的问题,在qobject_cast转换为接口指针时,需要连接信号和槽该怎么处理?

既然接口实现类会继承QObject,我们可以在接口里定义个QObject,在实现类构造是将对象保存在接口里,因此上面的接口和实现稍微修改下:

#define IID_ILOG "org.genggang.com.ilog"class ILog{public: ILog(QObject parent):_object(parent){} virtual ~ILog() {} virtual void ShowLog(QString from, LOG_LEVEL level, QString info){} QObject object(){return _object;}signals://起不到任何左右,纯粹为了定义,当然也可以是slots virtual void signalsTest()=0;private: QObject _object;};Q_DECLARE_INTERFACE(ILog, IID_ILOG)

实现类在实现构造函数是如下:

LogManager::LogManager(QObject parent):ILog(this){.....}

在使用时就可以如下:

ILog instance = qobject_cast<ILog>(xxxxx);connect(instance->object(), SIGNAL(signalsTest()), this, SLOT(DoTest()));

插件开发基本介绍就先写到这吧,下一篇就来实际的插件开发应用之日记插件

标签:

相关文章

语言中的借用,文化交融的桥梁

自古以来,人类社会的交流与发展离不开语言的传播。在漫长的历史长河中,各民族、各地区之间的文化相互碰撞、交融,产生了许多独特的语言现...

软件开发 2025-01-01 阅读1 评论0

机顶盒协议,守护数字生活的新卫士

随着科技的飞速发展,数字家庭逐渐走进千家万户。在这个时代,机顶盒成为了连接我们与丰富多彩的数字世界的重要桥梁。而机顶盒协议,作为保...

软件开发 2025-01-01 阅读1 评论0

语言基础在现代社会的重要性及方法步骤

语言是人类沟通的桥梁,是社会发展的基础。语言基础作为语言学习的基石,对于个人、社会乃至国家的发展具有重要意义。本文将从语言基础在现...

软件开发 2025-01-01 阅读2 评论0

粤语电影,传承文化,点亮时代之光

粤语电影,作为中国电影产业的一朵奇葩,以其独特的地域特色、丰富的文化内涵和鲜明的艺术风格,赢得了广大观众的喜爱。本文将从粤语电影的...

软件开发 2025-01-01 阅读5 评论0

苹果游戏语言,塑造未来娱乐体验的基石

随着科技的飞速发展,游戏产业逐渐成为全球娱乐市场的重要支柱。在我国,游戏产业更是蓬勃发展,吸引了无数玩家和投资者的目光。而在这其中...

软件开发 2025-01-01 阅读1 评论0