2025年QT插件开发(3)-- 插件之间相互通信

QT插件开发(3)-- 插件之间相互通信插件的通信通过插件管理器来管理 插件管理器转发插件的消息 首先 改一下接口 增加一个插件间通信的结构体 增加插件发送消息和接收消息的纯虚函数供插件实现 ifndef PLUGININTERF H define PLUGININTERF H include qtplugin qtplugin

大家好,我是讯享网,很高兴认识大家。

插件的通信通过插件管理器来管理,插件管理器转发插件的消息

首先,改一下接口,增加一个插件间通信的结构体,增加插件发送消息和接收消息的纯虚函数供插件实现

#ifndef PLUGININTERFACE_H #define PLUGININTERFACE_H #include <QtPlugin> #include <QJsonObject> struct PluginMetaData { QString from;//消息来源 QString dest;//消息目的地 QString msg; QObject *object = nullptr; QJsonObject info = QJsonObject(); }; Q_DECLARE_METATYPE(PluginMetaData);//确保类型可以通过信号槽传递 class PluginInterface { public: virtual ~PluginInterface() {} virtual QString get_name() const = 0; virtual QString show_text() const = 0; virtual void recMsgfromManager(PluginMetaData) = 0;//接收到来自创建管理器的消息 virtual void sendMsg2Manager(PluginMetaData) = 0;//给插件管理器发消息 }; Q_DECLARE_INTERFACE(PluginInterface,"org.galaxyworld.plugins.PluginInterface/1.0") #endif // PLUGININTERFACE_H 

讯享网

修改插件01如下,实现插件接口的信息接收函数,将插件接口的发送函数实现为信号

讯享网#ifndef PLUGIN01_H #define PLUGIN01_H #include "Plugin01_global.h" #include <QObject> #include "PluginInterface.h" #include <QDebug> class PLUGIN01_EXPORT Plugin01 : public QObject,public PluginInterface { Q_OBJECT Q_INTERFACES(PluginInterface) Q_PLUGIN_METADATA(IID "my_plugin01") public: Plugin01(); QString get_name() const { return "Plugin01"; } QString show_text() const { return "this is Plugin01"; } virtual void recMsgfromManager(PluginMetaData metaData) Q_DECL_OVERRIDE { qDebug()<<"插件Plugin01接收到消息:"<< metaData.msg; } signals: void sendMsg2Manager(PluginMetaData) Q_DECL_OVERRIDE; }; #endif // PLUGIN01_H 

然后是插件02,几乎一样的代码

#ifndef PLUGIN02_H #define PLUGIN02_H #include "Plugin02_global.h" #include <QObject> #include "PluginInterface.h" #include <QDebug> class PLUGIN02_EXPORT Plugin02 : public QObject,public PluginInterface { Q_OBJECT Q_INTERFACES(PluginInterface) Q_PLUGIN_METADATA(IID "my_plugin02") public: Plugin02(); QString get_name() const { return "Plugin02"; } QString show_text() const { return "this is Plugin02"; } virtual void recMsgfromManager(PluginMetaData metaData) Q_DECL_OVERRIDE { qDebug()<<"插件Plugin02接收到消息:"<< metaData.msg; } signals: void sendMsg2Manager(PluginMetaData) Q_DECL_OVERRIDE; }; #endif // PLUGIN02_H 

插件管理器做如下修改:


讯享网

让加载的插件信号管理插件管理器的转发函数,当插件发送含有消息内容的信号时,信号管理器捕捉信号并根据消息中包含的目标插件消息调用相对应插件的转发函数,让插件自己处理消息

改一下调用界面

发消息代码: 

 

结果:

代码:https://download.csdn.net/download/kenfan1647/  不想下载可以发私信我发给你 

小讯
上一篇 2025-03-03 17:56
下一篇 2025-03-27 16:52

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/73186.html