插件式框架学习(1)

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

它是一个基于 C++ / Qt 5 的桌面插件框架学习版,目前运行后主要显示一个空窗口,还没有具体业务功能。 核心价值是演示应用启动、命令分发、插件加载和共享对象管理。

软件是怎样运行的

启动流程比较清晰:

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

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

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

它会走完这条调用链:

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

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

所以:

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

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

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

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

Release v1.0.1 · lianpeiliang/LearnFramework

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


提问:1000代表什么?

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

它在两处配合使用:

注册命令时:

cpp 复制代码
registerHandler(1000, new PluginLoader);

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

发送命令时:

cpp 复制代码
dispatchCommand(1000, path.data(), path.size());

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

所以,DemoPlugin 能被加载,是因为它位于 plugins 目录并实现了**Plugin 接口**。以后这个目录里有多个插件,命令 1000 也会一起尝试加载它们。

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


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

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

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

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

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

相关推荐
在所不辞兄1 小时前
【零基础学智能仿真-61】DFT数值收敛与计算预算
人工智能·深度学习·神经网络·机器学习·1024程序员节
Shadow(⊙o⊙)1 小时前
LangChain 自定义工具全解析:从 @tool 到 bind_tools 的完整调用链路
java·服务器·前端·1024程序员节
Pointer Pursuit1 小时前
Linux环境变量
linux·服务器·c语言·链表·1024程序员节
weixin_539541771 小时前
Vue 中组件生命周期及uniapp页面生命周期的详细介绍
1024程序员节
AI技术新视界1 小时前
RSI的如何改进智能体的策略
1024程序员节
紧跟先前的步伐1 小时前
Go AI Agent 实战 13|大模型流式输出 Streaming 的实现
人工智能·ai·golang·1024程序员节
初阳7851 小时前
【基于Qt5仿音乐播放器(三)】——音乐管理
1024程序员节
CRMEB系统商城1 小时前
Redis + 消息队列 + 连接池:CRMEB PRO 性能优化的三驾马车
大数据·数据库·人工智能·小程序·php·1024程序员节
怪我冷i1 小时前
Rust 语言测试的组织结构
1024程序员节