面向 Web 前端架构师转型 C++/Qt 桌面客户端开发的每日学习内容
涵盖 C++、Qt、客户端架构、软件设计、性能优化、团队管理等
Day 33:类型擦除(Type Erasure)——把虚函数表从被包装类型身上搬到外壳身上,用「外部多态」换取值语义、异构容器与零侵入;它正是 std::function、std::any、QVariant、QMetaObject 的共同底层机制。含手写 Concept/Model/Wrapper 三层实现与 Qt6 类型擦除动作总线。
今日学习内容,点击查看详情
Day 32:依赖注入(Dependency Injection, DI)——把「我需要的依赖」从内部 new 改为从外部传入,是 DIP 的落地手段,也是可测试架构的地基。
今日学习内容,点击查看详情
今日学习内容,点击查看详情
今日学习内容,点击查看详情
2026-09-22 · 每日技术导师 · 接续 09-19《Qt Model/View 架构深潜》与 09-04《插件化架构》,从「技术深度」转向「让技术深度在团队中复利」
Day 29:状态机架构(State Machine / QStateMachine)——把「在什么状态下能响应什么事件、响应后去哪里、进出状态做什么」从散落的 if-else 与 bool 标志里抽出来,建模成状态集合 + 事件集合 + 转移规则(含守卫与动作)。含 C++17 表格驱动 FSM 最小实现(转移表 / 守卫 / 非法事件统计),以及 Qt6 分层状态机完整工程(QStateMachine + 嵌套状态 + QHistoryState 深历史 + 转移动作 + 守卫),并与 Day 19 状态模式做架构对比。
2026-09-19 · 每日技术导师 · 接续 09-16《Qt 元对象系统内幕》与 09-04《插件化架构》,从「框架替我刷新」走到「我必须亲手声明变更」
Day 28:撤销/重做架构(Undo/Redo Architecture)——把每一次数据改动封装成「可逆命令」,用命令栈 + 游标统一管理历史,从而实现任意步撤销、重做、脏标记与合并。含 C++17 手写命令栈最小实现(带 mergeWith 合并)与 Qt6 QUndoCommand/QUndoStack/QUndoView 完整可编译工程(双击添加、拖动合并、宏命令、脏标记)。
Day 27:插件架构模式(Plugin Architecture)——宿主只依赖抽象接口,具体功能以独立动态库在运行期被发现、校验、加载与卸载;含 C++17 手写注册表实现与 Qt6 QPluginLoader + Q_DECLARE_INTERFACE + Q_PLUGIN_METADATA 完整可编译工程。
2026-09-16 · 每日技术导师 · 接续 08-31《客户端架构:分层、依赖注入与信号槽解耦》,从「会用」走到「知道它怎么跑」
Day 26:事件总线模式(Event Bus / Publish-Subscribe)——用发布-订阅把模块之间的直接依赖换成向总线广播,实现跨模块解耦通信;含 C++17 最小实现与 Qt6 类型安全总线。
2026-09-13 · 每日技术导师 · 接续 08-22《编译、链接与 ABI》,从「原理」走到「工程落地」
Day 25:MVVM 架构模式——ViewModel 把界面状态与行为从 View 中抽离出来,用数据绑定做到“改状态即改界面”,是 Qt/QML 桌面客户端架构的主流选择。
Day 24:MVC 架构模式——把数据(Model)、界面(View)与调度逻辑(Controller)彻底分层,它既是 GUI 架构的思想源头,也是 Qt Model/View 框架的直接前身。
2026-09-10 · 每日技术导师 · 接续 08-07《Qt 网络编程》,从 API 下沉到协议栈原理
2026-09-09 · C++17 / Qt 6 · 全文约 5200 字,阅读约 21 分钟
2026-09-07 · C++17 / Qt 6 · 全文约 5000 字,阅读约 20 分钟
2026-09-07 · 每日技术导师 · 接续 08-26 事件循环与 08-28 多线程并发之后的异步编程进阶篇
模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
作为前端架构师,你对插件化其实"天生熟悉"——VSCode 的插件市场、Chrome 的扩展生态、webpack 的 loader/plugin 机制,都是你日常依赖的扩展体系。但当你转向 C++/Qt 桌面客户端时会发现:这里没有解释器、...
策略模式(Strategy Pattern):定义一族算法(或业务规则),将每一个算法分别封装成独立的对象并使它们实现同一个抽象接口,从而让它们可以在运行时互相替换——算法的变化独立于使用算法的客户端。它属于 GoF 23 种设计模式中的行...
前面几期解决了"怎么渲染、怎么跑事件循环、怎么并发、怎么分层"——这些是把功能做出来;而性能是在资源约束下把体验做出来。前端架构师对性能并不陌生:长列表虚拟化、bundle 体积、首屏时间,但你熟悉的优化手段大多建立在浏览器和 JS 引擎替...
状态模式(State Pattern)是 GoF 二十三种设计模式中的行为型模式。它把"对象在不同状态下表现出的不同行为"封装成一组独立的状态类,让对象在内部状态发生改变时自动切换自己的行为——对客户端而言,对象仿佛"换了一个自己":同一个...
前面几期我们解决了"怎么渲染、怎么跑事件循环、怎么并发"——这些都是技术问题;而架构师每天真正面对的是组织问题:这段代码该放哪个模块?谁允许依赖谁?为什么加一个缓存要改五个文件?在 Web 世界里,浏览器替你划好了边界(DOM、渲染、网络、...
定义对象间一对多的依赖关系:当一个对象状态改变时,所有依赖它的对象都会得到通知并自动更新 —— 事件驱动世界的基石
在不破坏封装的前提下,把对象的内部状态"拍成照片"存到外面,想回到过去时再"洗出来"——状态的时间旅行,由对象自己掌控。
用一个"协调中枢"封装对象间的交互,让同事对象之间不再互相认识——网状依赖变星形依赖。
上一期我们吃透了 Qt 事件循环:UI 必须活在主线程,事件循环一旦被阻塞,界面就冻结。那么问题立刻来了——耗时任务(网络请求、磁盘 IO、图像处理、数据库查询)到底该放哪里跑?答案就是多线程。对从 Web 迁移过来的你,这是知识模型变化最...
在不暴露集合内部结构的前提下,提供统一方式顺序访问集合元素 —— C++/Qt 每日设计模式 · 2026-08-27
作为前端架构师,你熟悉 Vue 的响应式、React 的渲染模型、浏览器的合成器——而 QML 恰好是这些概念在原生 C++ 世界的完整映射:声明式语法、依赖驱动的属性绑定、GPU 场景图渲染。Qt Quick(QML 的 UI 框架)是 ...
命令模式(Command Pattern):把"一个请求 / 一次操作"封装成一个对象——这个对象携带了做什么、对谁做、需要哪些参数的全部信息,从而让"发起请求的人"(按钮、菜单、快捷键)与"真正干活的人"(业务对象)彻底解耦。一句话:把操...
你在 Node.js 里早就和事件循环朝夕相处——libuv 是每个 Node 进程的心脏,浏览器里的宏任务/微任务队列也是同一套思想。Qt 同样建立在事件循环之上:QEventLoop 是所有 GUI 交互、定时器、跨线程通信与信号槽投递...
你在前端早已熟悉 style → layout → paint → composite 这条浏览器渲染管线,但桌面客户端的像素究竟是怎么产生的?Qt Widgets 的 paintEvent 与 Qt Quick 的 Scene Graph...
责任链模式(Chain of Responsibility):把"谁能处理这个请求"的判定从调用方剥离出来,将多个处理者串成一条链,请求沿着链依次传递,直到某个处理者接管并处理,或到达链尾被兜底拒绝。一句话:请求像接力棒,谁能接谁接,没人接...
给真实对象找一个「替身」:接口一字不改,访问权限、加载时机、网络传输全部由替身代劳。
2026-08-24 · 每日技术学习 · 前端架构师 → C++/Qt 客户端架构师
2026-08-23 · 每日技术学习 · 前端架构师 → C++/Qt 客户端架构师
用「共享」对抗「海量」:把对象的内部状态抽出来共用,把外部状态交给使用者。
给复杂子系统配一个前台接待员——客户端只点单,不进后厨。
今日学习内容,点击查看详情
今日学习内容,点击查看详情
装饰器模式(Decorator Pattern):在不修改原有类代码、不改变对外接口的前提下,通过包装(组合)的方式,动态地为单个对象附加新的职责。它被 GoF 称为"继承的一种更灵活的替代方案"。
2026-08-20 · 把"单个对象"和"组合对象"放进同一棵树,让叶子与枝干共用一张脸
2026-08-20 · 每日技术学习 · 第 22 期
2026-08-19 · 把"抽象"与"实现"拆成两座独立的山,再用一座组合的桥连起来
2026-08-19 · 每日技术学习 · 从 Web 架构师到桌面客户端架构师 · 总第 21 期
2026-08-18 · 每日技术学习 · 面向 Web 架构师转型 C++/Qt
Day 6:适配器模式(Adapter Pattern)——将一个类的接口转换成客户端期望的另一个接口,使原本因接口不匹配而无法协作的类能够一起工作。
2026-08-17 · 每日技术学习 · 面向 Web 架构师 → C++/Qt 客户端架构师
学习路线位置:创建型模式收官之战。前四天分别解决了「全局唯一」「一个产品一个工厂」「一族产品配一个工厂」「分步构建复杂对象」,今天解决创建对象的最后一个难题——复制一个现成的对象。
今日学习内容,点击查看详情
把一个复杂对象的构建过程与它的内部表示分离,让同样的构建流程能造出不同的产品。—— 创建型模式第四站,前三天依次学完单例、工厂方法、抽象工厂,今天解决的是"对象太复杂、构造函数参数爆炸"的问题。
前端架构师 → C++/Qt 桌面架构师 · 成长系列
Day 3:抽象工厂模式(Abstract Factory)——用产品族工厂一键生成配套对象,从创建单个对象升级为创建一整族对象。
Day 2:工厂方法模式(Factory Method)——把new从调用方剥离,创建型模式家族第一步。
2026-08-14 · 面向 Web 架构师转型 C++/Qt 桌面客户端
今日学习内容,点击查看详情
今日学习内容,点击查看详情
每日技术导师 2026-08-12:Qt 插件系统与插件化架构——用 QPluginLoader 构建可扩展的大型客户端。从 Web 微前端迁移视角深入理解接口契约、IID、元数据与生命周期管理。
今日学习内容,点击查看详情
今日学习:Qt 多线程——QThread 与线程亲和性。从 std::thread 到 QThread:理解线程亲和性、事件循环与跨线程信号槽,写出不卡界面的桌面应用。
今日学习:锁与并发原语——数据竞争、std::mutex、std::atomic、条件变量与 Qt 线程同步。从 Web 单线程世界到 C++ 并发世界。
今日学习内容,点击查看详情
今日学习:Qt 网络编程——QNetworkAccessManager 与异步网络层设计。从请求调度、连接池到事件循环驱动的异步回调,与 Web 的 fetch/Node 模型同构。
今日学习内容,点击查看详情
今日学习:Qt Model/View 架构——数据与界面解耦的引擎,理解虚拟化渲染与信号契约。
今日学习:C++内存管理——从栈到堆,从new/delete到智能指针,理解内存布局与生命周期。
今日学习:STL 容器与算法——从JavaScript数组思维迁移到C++值语义容器。vector/map/unordered_map的底层原理、迭代器失效、erase-remove惯用法、算法库与Qt6容器对比,以及高频词统计实战。
今日学习:模板与泛型编程——从TypeScript泛型到C++模板。编译期代码生成与类型擦除的本质区别、静态多态与动态多态、STL与Qt6容器/connect的模板基石,以及scope_exit实战。
今日学习:Lambda 表达式与函数式编程——从JS箭头函数到C++闭包。捕获语义、生命周期、std::function性能真相,以及Qt6信号槽为什么离不开lambda。
今日学习:移动语义与右值引用——为什么std::move不移动任何东西?从vector扩容到Qt6容器改造,理解C++所有权转移之道。
今日学习:RAII与智能指针——C++资源管理的核心思想。从Web GC到C++ RAII,理解为什么C++不需要垃圾回收。