当前位置: 首页 > news >正文

Qt 高阶 08|Qt 插件开发 接口设计、插件编写、动态加载插件

一、插件原理

基于抽象接口 + 动态库(dll/so/dylib)实现解耦扩展,主程序只依赖接口,不依赖具体实现。


二、步骤 1:定义统一抽象接口(头文件)

cpp

运行

// plugininterface.h #ifndef PLUGININTERFACE_H #define PLUGININTERFACE_H #include <QObject> class PluginInterface { public: virtual ~PluginInterface() = default; virtual QString getPluginName() = 0; virtual void exec() = 0; }; // Qt插件宏标记 #define PluginInterface_iid "com.example.PluginInterface" Q_DECLARE_INTERFACE(PluginInterface, PluginInterface_iid) #endif

三、步骤 2:编写插件工程(动态库)

  1. 新建Library -> Qt Plugin项目;
  2. 实现接口类,并添加插件导出宏:

cpp

运行

#include "plugininterface.h" class DemoPlugin : public QObject, public PluginInterface { Q_OBJECT Q_PLUGIN_METADATA(IID PluginInterface_iid FILE "plugin.json") Q_INTERFACES(PluginInterface) public: QString getPluginName() override { return "演示插件"; } void exec() override { qDebug() << "插件执行"; } };

3.编译生成对应平台插件库文件。


四、步骤 3:主程序动态加载插件

cpp

运行

#include <QPluginLoader> QPluginLoader loader("demoplugin.dll"); // Windows dll Linux so macOS dylib QObject* obj = loader.instance(); if(obj) { PluginInterface* plugin = qobject_cast<PluginInterface*>(obj); if(plugin) { qDebug() << plugin->getPluginName(); plugin->exec(); } }

小结

插件架构实现功能热插拔、模块解耦,大型软件、模块化系统必备;核心是抽象接口 +Q_PLUGIN_METADATA宏。

http://www.jsqmd.com/news/985703/

相关文章:

  • 菏泽市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 三大殿
  • 百度内部启动青木、风雷两大计划,百度大动作该咋看?
  • 肇庆市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 三大殿
  • 网络测试仪RENIX实战:从RAW流发送到Wireshark分析,一条龙排错指南
  • Java全栈工程师面试实录:从基础到高阶的全面解析
  • 别再手动调参了!用PyTorch Lightning的ModelCheckpoint和EarlyStopping解放你的双手
  • metadef元数据定义框架深度解读:自定义算子开发与昇腾NPU扩展完全指南
  • Mac剪贴板革命:灵剪Cliperx重塑高效工作流
  • 关于占卜到一定境界的问题
  • 舟山市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 三大殿
  • 信息学奥赛选手必看:如何用C++ STL的sort函数优雅解决‘成绩排名’类问题(含自定义比较函数详解)
  • OpenHarmony南向开发实战:用逻辑分析仪调试Hi3861与DHT11的通信时序
  • 【AgentScope Java新手村系列】(1)框架简介与环境搭建
  • 衡水市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 三大殿
  • 2026国内正规考研培训机构综合实力排行盘点 - 奔跑123
  • selenium+python做web端自动化测试框架与实例详解
  • 避开CODESYS多轴编程的坑:从MC_Power参数到Cam表设置的完整避坑指南
  • STL源码解析之list(1)
  • 别再只用Samba了!手把手教你用Jellyfin+Portainer打造家庭海报墙媒体库(从刮削到转码)
  • 自贡市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 三大殿
  • YOLO11 改进系列 | Focaler-IoU 系列 Loss 全解析:focaler_iou、focaler_ciou、focaler_diou、focaler_eiou、focaler_s
  • 个人碎碎念
  • 苏州市新道动力设备科技有限公司 - 火电厂 除盐水冷却装置 最好 品牌 定制
  • OEXN:“太空上市预期持续升温”
  • Python链式调用深度拆解:从语法糖到底层架构,入门到工业级落地
  • 镇江帝舵+浪琴手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • 深入浅出:用生活中的例子讲明白DeepSort里的卡尔曼滤波和匈牙利算法
  • 从开发视角看安全:我的Spring Boot项目是如何一步步防御XSS、CSRF和越权的?
  • 避坑指南:用Docker在Ubuntu上快速部署Mosquitto,告别环境依赖烦恼
  • 南京FIGO软件人工智能学习之路第四讲:AI心法 - 提示词工程 (Prompt Engineering)