当前位置: 首页 > 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.rkmt.cn/news/1497445.html

相关文章:

  • 菏泽市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 三大殿
  • 别再手动调参了!用PyTorch Lightning的ModelCheckpoint和EarlyStopping解放你的双手
  • Mac剪贴板革命:灵剪Cliperx重塑高效工作流
  • 舟山市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 三大殿
  • OpenHarmony南向开发实战:用逻辑分析仪调试Hi3861与DHT11的通信时序
  • 衡水市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 三大殿
  • STL源码解析之list(1)
  • OEXN:“太空上市预期持续升温”
  • 从RTL代码到GDSII流片:一个真实小模块的Synopsys工具链实战踩坑记录
  • 别再只背公式了!用‘小学生也能懂’的比喻,彻底搞懂RSA低加密指数攻击为什么危险
  • 从热水器到充电桩:手把手教你根据电器功率算清空开型号(C32/C40/Dxx详解)
  • 03-状态管理与路由——05-React Router 基础配置
  • 别再被虚线框困扰了!手把手教你用Visio+pdfcrop+Acrobat DC搞定LaTeX插图阴影问题
  • 纯文科能报大数据本科吗?四条迂回路径+CDA破局
  • Moneta Markets亿汇:“比特币反弹走势仍脆弱”
  • 告别臃肿!VS2022只装C++桌面开发,如何精准搭配Qt 5.12打造轻量级GUI编程环境
  • 告别Apex!用PyTorch Lightning轻松搞定半精度训练与多卡同步(保姆级避坑指南)
  • 2026年6月丰宁坝上草原住宿民宿甄选指南:短途自驾、朋友聚会、观景食宿一站式参考 - 海棠依旧大
  • 保姆级教程:用MounRiver Studio和WCH-Link点亮你的第一个CH32V103C开发板
  • 三明百达翡丽+宝珀手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • 告别IP依赖:在Vivado中直接手写MMCME2_ADV原语生成多路时钟(附参数计算避坑指南)
  • 遗传算法实战调参指南:从早熟收敛到工程落地
  • INA219采样不准?从硬件选型到软件校准的避坑指南
  • 三亚百达翡丽+宝珀手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • 嵌入式设备如何用C语言对接天翼物联网平台CTWing?手把手教你移植SDK到MCU
  • 从“数独思维”到“启发式搜索”:我是如何用六条策略搞定日历拼图这个烧脑游戏的
  • 工业级遗传算法实战:调参、防早熟与收敛诊断
  • Mac玩转51单片机:除了Keil,用开源工具链(sdcc/stcgal)开发是种什么体验?
  • STM32F103的RTC掉电不保存?手把手教你修改RT-Thread的drv_rtc.c源码
  • 手把手教你用SuperMap iClient3D for WebGL加载山东省天地图(附完整代码与参数详解)