news 2026/10/28 10:17:29

插件式框架学习(1)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
插件式框架学习(1)

lianpeiliang/LearnFramework: 基于 C++ / Qt 5 的轻量级桌面插件框架学习项目,包含应用启动、命令与消息分发、插件加载及服务注册。

它是一个基于 C++ / Qt 5 的桌面插件框架学习版,目前运行后主要显示一个空窗口,还没有具体业务功能。

核心价值是演示应用启动、命令分发、插件加载和共享对象管理。

软件是怎样运行的

启动流程比较清晰:

main 创建 QApplication → 创建 ApplicationHost → CommandBindings 注册命令 1000,对应 PluginLoader → ApplicationHost::show() 发送命令 1000 → CommandBus 找到 PluginLoader → 扫描程序旁的 plugins 文件夹 → 加载插件并调用 initialize() → 显示主窗口,进入 Qt 事件循环

现在调用这行,是不是没有效果?

对,当前没有插件时,这行不会产生可见效果,但它确实执行了。

它会走完这条调用链:

发送命令 1000 → 找到已注册的 PluginLoader → 调用 PluginLoader::dispatchCommand() → 扫描程序旁的 plugins 文件夹

如果文件夹不存在或里面没有动态库,就没有插件需要初始化,函数直接返回true;这里也没有使用返回值。

所以:

  • 现在没有插件:注释掉这行,显示出来的空窗口效果相同。
  • 以后有符合接口的插件:这行会加载插件并调用initialize(),就有实际作用了。

那你帮我写一下1000这个插件吧,功能简单点即可

写好了,插件功能很简单:

  • 加载后显示“示例插件”窗口。
  • 点击“点我计数”,显示累计点击次数。
  • 退出主程序时自动释放窗口。

Release v1.0.1 · lianpeiliang/LearnFramework

这是v1.0.1,载入了一个插件。


提问:1000代表什么?

1000是这个项目自行约定的**“加载插件”命令编号**,不是 Qt 规定的,也不是某个插件的编号。

它在两处配合使用:

注册命令时:

registerHandler(1000, new PluginLoader);

意思是:收到命令 1000,就交给 PluginLoader 处理。

发送命令时:

dispatchCommand(1000, path.data(), path.size());

意思是:让 PluginLoader 扫描 path 指定的目录,加载里面符合接口的插件。

所以,DemoPlugin能被加载,是因为它位于plugins目录并实现了Plugin接口。

以后这个目录里有多个插件,命令1000也会一起尝试加载它们。

你可以把1000改成其他未占用的编号,只要注册、发送以及加载器内部的编号判断保持一致即可。


所以1000实际上是一个命令,用来加载plugins目录下的所有动态库

对,更准确地说,1000是“加载插件”命令的编号。

当前代码收到它后,会扫描plugins目录第一层的所有动态库文件,尝试加载。

只有符合 Qt 插件格式、实现了约定的Plugin接口,并且initialize()成功的插件,才会被保留。

所以普通 DLL 即使放进去,也不一定能作为插件加载。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 10:13:58

LPC_经纬海拔转XYZ

LPC:Localization Planning and Control 输入:GNSS 输出 LLH(lat, lon, h),WGS84(纬度 φ,经度 λ,大地高 h) 输出:ENU(东、北、天) / NED(北、东…

作者头像 李华
网站建设 2026/10/28 10:13:03

PWA站点采集实战:Service Worker缓存机制拆解与动态内容完整提取方案

最近团队接了几个工业SaaS平台的数据采集需求,清一色都是PWA架构。一开始用常规的HTTP请求框架去做,要么拿到的是几天前的旧数据,要么页面骨架出来了但核心数据区域全是空的,抓下来的HTML全是缓存壳子。一开始以为是对方做了强反爬,调了代理、浏览器指纹都没用,最后抓包逐…

作者头像 李华
网站建设 2026/10/28 10:12:48

必知!Python 基于sklearn库的6个项目,解锁机器学习核心技能

基于 的 (-Learn)库的机器学习编程练习项目-Learn这个简称指的是中那个强大而且在很大程度上被使用的机器学习库, 它提供了丰富的算法和工具, 适用于各种各样的机器学习任务。以下是一些基于该库的机器学习编程练习项目。这些项目按照从基础到进阶的顺序…

作者头像 李华
网站建设 2026/10/28 10:12:47

Python入门难不难?新手最该学什么

“想学, 但是我们不知道从哪里开始”、“看视频的时候觉得特别简单, 可一动手去做的时候就卡住了”——这种情况几乎是每一个新手都会碰到的问题。其实, 这件事并没有像人们想象的那样难, 真正让人感到困难的地方不是语言本身, 而是你到底有没有使用恰当的学习顺序。一、先说结…

作者头像 李华
网站建设 2026/10/28 10:12:05

商品结构有没有被改:用Pillow定位局部像素差异

AI做商品图可能改变产品在画面中的轮廓、连接关系或可见细节,但一张差异图不能直接判断商品有没有变形。背景调整、压缩和光照变化也会造成像素差异。本文给出一个较窄的本地检查方法:在已经对齐的两张图片中,比较同一矩形区域,把…

作者头像 李华
网站建设 2026/10/28 10:10:16

DCF / EDCA 完整流程、参数与时延换算

DCF / EDCA 完整流程、参数与时延换算下面全部基于工业场景主流:5 GHz OFDM(Wi‑Fi 5 / Wi‑Fi 6) 基础物理层常量\begin{align} SIFS & 16\ \mu s \\ SlotTime & 9\ \mu s \end{align}SIFS:短帧间隔,专门用于…

作者头像 李华