- 博客(53)
- 收藏
- 关注
原创 【C++/Qt 进阶】设计模式系列(7):过滤器模式——把“筛选条件“变成可组合的积木
⚠️ 前几篇聚焦于“如何创建对象”(创建型)和“如何组织对象”(结构型)。从本篇开始,我们正式进入行为型设计模式的领域——但过滤器模式是个例外:它在结构上更像“可组合的积木”,是结构型与行为型的融合体。上一讲我们用桥接模式拆解了两个独立变化的维度。“给我一份数据,我要按多个条件筛选,并且这些条件能自由组合。这正是 Qt 工程师常遇到的典型场景——日志或告警列表的多维筛选。
2026-10-27 12:12:17
160
原创 【C++/Qt 进阶】设计模式系列(6):桥接模式——把“两个独立变化的维度“拆开
本文详解桥接模式在C++/Qt中的应用,通过“形状×颜色”类爆炸问题引出核心思想:用组合替代继承,将独立变化的维度解耦。结合pImpl惯用法,实现接口与实现的彻底分离,支持运行时动态切换、避免类爆炸,并符合开闭原则。典型应用于图形系统、跨平台开发与日志模块,是应对复杂组合场景的高效设计模式。
2026-10-19 20:32:15
421
原创 【C++/Qt 进阶】设计模式系列(5):适配器模式——给“不兼容的接口“贴一层翻译膜
⚠️ 注意:前四篇(单例 / 工厂 / 建造者 / 原型)均为创建型模式;从本篇起正式进入结构型模式的第一站——适配器。上一讲我们通过原型模式解决了“复制当前对象”的问题。“我手头有一个现成的类(可能是第三方库,也可能是遗留代码),它的接口与系统需求不匹配,且无法修改源码。该怎么办?举个典型的 Qt 工程师都遇到过的场景——日志系统迁移// 旧代码:全量使用 qDebug()// 输出到 stderr// ... 大量业务逻辑 ...
2026-10-18 18:19:15
245
原创 【C++/Qt 进阶】设计模式系列(4):原型模式——用“克隆“代替“重新构造“
上一讲我们借助建造者模式解决了“复杂对象分步装配”的难题——零件稳定,组合灵活。“我手头已有近乎完美的对象,仅需局部修改生成新对象。若重新new一次再逐个set字段,不仅效率低下,还极易遗漏或出错,该怎么办?这正是许多 Qt 工程师都曾遭遇的典型场景——撤销/重做(Undo/Redo)。// 反人类写法:每次操作都“重造”一份状态// 仅保留指针无用,深拷贝需手动实现m_doc->layers(), // 假设包含 1000 个 Layer。
2026-10-17 13:23:39
222
原创 【C++/Qt 进阶】设计模式系列(3): 建造者模式——把“复杂对象的组装“从业务代码里剥离出来
上一讲我们探讨了工厂模式——核心在于“选择”创建哪种对象。而本讲将视角从“选择”转向“组装”:当一个复杂对象需要分步构建,字段繁多导致构造函数无法承载时,工厂模式便显得力不从心。此时,建造者模式(Builder Pattern)正是为这类场景量身打造的解决方案。“我手头有一组固定零件,但组装顺序频繁变化。如何将‘组装逻辑’与‘零件本身’解耦?举个实际例子:在一个跨平台的设备配置中心中,运行时需根据用户选择的“通道 + 协议 + 缓存策略 + 日志级别 + 编码格式”等组合,动态生成最终的对象。
2026-10-14 20:45:46
191
1
原创 【C++/Qt 进阶】设计模式系列(2):工厂模式——从游戏角色到披萨店
还记得初次接触工厂模式时,各种"产品"、"具体工厂"、"抽象产品"等专业术语让我一头雾水。直到我通过游戏角色创建和披萨店运营这两个生活化案例来理解,才真正掌握其精髓。本文将通过通俗易懂的讲解和完整的C++代码示例,系统讲解简单工厂、工厂方法和抽象工厂三种设计模式。优势实现简单,集中管理创建逻辑客户端只需传入参数,无需了解创建细节局限新增产品类型需要修改工厂类产品类型多时工厂类会臃肿适用场景:产品类型较少且稳定的简单项目核心思想:将对象创建委托给子类,由子类决定实例化哪个具体类。优点。
2026-10-14 07:23:53
148
原创 【超详细】Windows+VS2019+CMake编译libcurl静态库,从零搭建FTP客户端(避坑完整版)
本文手把手教程指导C/C++开发者在Windows环境下源码编译libcurl静态库,并通过CMake集成实现功能完整的FTP客户端。涵盖环境配置、避坑指南、静态编译、项目集成及12大高频问题解决方案,支持文件上传下载、目录遍历与异常处理,全程实操可直接上线,适合初中级开发者快速落地项目。
2026-10-11 10:27:52
243
原创 VS+Qt 项目导入外部工程:C1083 找不到 Qt 头文件 完美解决
下图中的Qt Installation和Qt Modules中是设置qt的头文件的,但是对于别人的库来说,在这里的设置是没用的,我们要直接在属性-》VC++-》包含目录中添加qt的头文件路径即可。我们知道用别人库的时候,不仅要设置头文件路径,还要设置库的.lib文件的路径,但是qt的lib我不用在设置了, 我们设备上的设置就够了。如下图中的:$(Qt_LIBS).这是因为别人的qt的路径和你设备上路径不一致,所有我们直接把我们设备上的qt的路径添加到属性中就行,
2026-10-10 10:55:38
123
原创 解决VS2019 设置启动项 A,重新打开总是变成 B
右键 A 项目,选择【设为启动项目】,A 随即加粗显示;但关闭 VS 后重新打开,启动项又变回 B 加粗。
2026-08-25 18:44:09
177
原创 VS+OpenCV诡异LNK2019终极解决方案
1、绝大多数 OpenCV LNK2019(noArray/copyTo/cvtColor)报错,不是库没配、不是版本不对,是运行时库不匹配;2、官方 OpenCV 仅支持/MD / /MDd,静态运行时库 /MT /MTd 直接不兼容;3、Debug 必须严格对应 /MDd,Release 严格对应 /MD,一一对应永不报错;4、排查优先级:运行时库匹配 > 平台架构匹配 > 版本路径匹配。如果你也遇到头库配套却链接报错,直接改运行时库,百分百解决!
2026-06-09 11:25:55
421
原创 Qt信号槽参数类型全解:原生类型、结构体、enum class强枚举注册与传参实战
本文系统梳理了Qt信号槽机制中的参数传递规范,重点解析三类参数的注册与使用方法:1.原生免注册类型(基本类型/Qt内置类型/元素为免注册类型的容器);2.自定义结构体(需Q_DECLARE_METATYPE声明并调用qRegisterMetaType注册,推荐带名称的跨线程安全注册);3.enum class强枚举(必须通过Q_ENUM在辅助类中注册)。文章特别强调了跨线程队列连接时的类型注册要求,指出裸指针、非常量引用等禁止使用的参数类型,并提供了常见编译错误的解决方案。
2026-06-02 16:06:39
483
原创 【C++/Qt 进阶】设计模式系列(1):单例模式——饿汉式内存泄漏真相、指针单例存在的意义、五种实现终极对比
本文深入解析C++单例模式的五种实现方式,包括饿汉式、懒汉式、双重检查锁和Meyers'单例等。通过对比分析各方案的线程安全、性能、内存管理和适用场景,指出饿汉式静态对象版无内存泄漏风险,而指针版需要手动释放。文章强调C++11后应优先采用Meyers'单例作为最佳实践,它兼具线程安全、懒加载和自动内存管理优势,同时针对不同需求场景提供了架构选择建议,如大型资源类适用懒加载、跨模块兼容需用指针版本等。
2026-06-01 23:19:36
367
原创 Git & GitHub 从入门到精通:全流程实战教程
本文是一篇Git与GitHub的实用指南,从安装配置到团队协作完整解析版本控制工作流。内容涵盖:环境搭建(Windows/macOS/Linux)、Git核心概念(三区四态)、本地操作(提交/分支/回滚)、GitHub远程协作(推送/Fork/PR),并提供常见问题解决方案和命令速查表。特别强调理解优先原则,通过流程图解和场景化示例,帮助开发者快速掌握代码版本管理核心技能,适合作为日常开发的参考手册。
2026-05-30 22:06:07
385
1
原创 VS+Qt开发必看:彻底理解$(QtIntDir)uic\与UI文件生成路径
(QtIntDir)uic**是Qt VS Tools插件为uic界面编译器预设的默认输出路径模板,用于存放.ui文件编译后生成的ui_xxx.h**头文件。uic(Qt User Interface Compiler)的作用是将.ui界面文件编译为C++可识别的头文件,供项目代码调用界面控件。项目属性 → Qt User Interface Compiler → uic修改Output Directory为:理解并正确配置是VS+Qt开发的基础。
2026-05-29 17:03:59
421
原创 Qt QThread最标准Worker线程用法(零崩溃、零内存泄漏)
摘要:本文深入解析Qt多线程开发中的Worker+moveToThread模式,这是Qt官方推荐的工业级解决方案。文章指出QThread本质是线程管理器而非线程本身,详细阐述了标准6步流程:创建Worker类、实例化线程和Worker、moveToThread绑定、建立信号槽连接、启动线程及自动清理。重点强调Worker必须无父对象、必须调用QObject构造函数等关键细节,并提供完整可编译代码示例。通过遵循该规范,可有效解决界面卡死、内存泄漏等常见问题,适用于所有Qt版本的多线程开发。
2026-05-27 22:34:34
543
原创 C++ auto
本文深入解析auto关键字的类型推导机制与范围for循环的实战应用,揭示常见属性丢失问题,并提供工程实践中的最佳编码方案,适合各层次开发者参考。
2026-05-26 17:20:22
338
原创 VMware虚拟机安装银河麒麟V10超详细图文教程(全程附实拍截图+避坑指南)
本文详细记录了在VMware虚拟机中安装银河麒麟操作系统的完整流程及常见问题解决方案。主要内容包括:资源准备(系统镜像和VMware下载)、虚拟机创建与配置(重点说明镜像选择、系统识别等关键避坑点)、系统安装步骤(从启动到完成部署的全过程),并总结了四大安装陷阱及对应正确操作。文章特别针对"操作系统未找到"、运行卡顿、磁盘空间不足等常见问题提供了具体解决方法,配有实拍操作截图,适合新手按步骤操作实现一次性安装成功。
2026-05-18 22:00:56
6483
1
原创 第二篇:VS2019 + Qt5.9.9 中文乱码实战:源码GB2312不乱码、文件写入与跨平台方案
本文分析了GB2312源码在VS2019+Qt5.9.9环境下不乱码的特殊现象,指出这是Qt未文档化的平台兼容行为(实际使用fromLocal8Bit解析)。针对文件写入乱码问题,建议使用QTextStream而非直接write()。最后提出跨平台开发编码规范:统一使用UTF-8无BOM源码,添加/utf-8编译选项,采用QStringLiteral或u8前缀字符串,并在文件操作时显式设置UTF-8编码。这些措施可确保代码在不同平台下的兼容性和稳定性。
2026-05-16 15:04:03
573
原创 第一篇:字符编码全解:从ASCII/GBK/Unicode到UTF-8
字符编码是将人类可读的字符(字母、汉字、标点、特殊符号),映射为计算机可存储、传输、解析的二进制字节序列的统一规则。计算机底层只认识0和1,无法直接识别文字;编码就是把文字翻译成二进制,解码就是把二进制还原成文字。核心真理:乱码的本质只有一个——编码和解码使用的规则不统一。多字节数值在内存中的存储排列顺序,分两种:高位字节在前低位字节在前现实场景:Intel/AMD x86 架构CPU默认小端序网络协议、服务器传输默认大端序。
2026-05-16 13:14:14
766
原创 CPU架构篇:Intel、AMD与x86、x64、ARM全解析
本文系统梳理了CPU架构的发展历程,重点解析了x86、x64和ARM三大架构的核心差异及其应用场景。
2026-05-14 11:50:56
1216
原创 计算机小白进阶笔记--操作系统篇:搞懂Unix、Linux、Windows、macOS及国产麒麟系统的区别!
本文系统梳理了主流操作系统的分类与特点。首先区分了桌面电脑与工业电脑的不同需求,指出工业场景需要高可靠、硬实时的专用系统。随后详细解析Unix、Linux、macOS和Windows四大系统的起源、定位与适用场景:Unix追求极致稳定,Linux开源全能,macOS精致易用,Windows大众兼容。特别介绍了国产银河麒麟系统的"桌面+工业"双版本设计,强调其国产化适配优势。最后总结指出,选择操作系统应基于具体需求,不同系统各有其最适合的应用场景。全文通过生动比喻和对比表格,帮助读者快速理
2026-05-14 10:29:48
624
原创 .gitignore 配置了却不生效?Git 缓存清除与 VS 项目忽略规则终极指南
摘要:针对Visual Studio开发C++/Qt项目时Git忽略编译文件失效的问题,本文揭示核心原因是.gitignore仅对未追踪文件有效。解决方案分三步:1)执行git rm -r --cached .清除缓存;2)重新git add .使.gitignore生效;3)提交变更。文末提供优化版.gitignore模板,包含VS/Qt特有的忽略规则(如*.tlog、.user、.pdb等),通过正确清除Git缓存可永久解决临时文件被追踪的问题,提升版本管理效率。(149字)
2026-05-13 11:38:20
243
原创 第三篇:预编译头配置踩坑全记录:从 C1010 到 C2855,所有错误一次性解决
本文详细解析了预编译头配置中的常见错误及解决方案。针对C1010"意外的文件结尾"错误,指出主要原因是pch.h项类型设置错误、包含业务头文件或#include位置不当;对于C2857"找不到#include语句"错误,强调pch.cpp必须包含且首行为#include"pch.h";VS2019特有的C2855错误则需关闭符合模式。文章提供了完整的预编译头检查清单,包括正确区分pch.h/pch.cpp、限制pch.h内容、处理Qt生成文件等关键
2026-05-12 18:47:29
323
原创 第二篇:工业级 C++/Qt 项目预编译头(PCH)完整配置指南:从 0 到 1 部署,编译速度提升 80%
本文介绍了如何利用预编译头(PCH)技术提升Qt项目的编译效率。主要内容包括:PCH的核心原理是将不变的库头文件提前编译成二进制缓存;详细配置流程,从创建pch.h/pch.cpp到项目属性设置;针对老项目的两种批量部署方案;强调PCH需配合头文件原则使用,业务头文件禁止放入PCH。通过正确配置,可显著减少重复编译时间,提升开发效率。
2026-05-12 18:13:34
691
原创 第一篇:工业级 C++/Qt 项目头文件包含原则:告别循环依赖与编译玄学
《工业级Qt项目头文件规范指南》 摘要:本文针对Qt工业软件开发中常见的头文件问题,提出三大核心设计原则:1)自包含原则,确保头文件独立编译不依赖隐式包含;2)最小依赖原则,优先使用前向声明减少编译依赖;3)头文件不定义原则,避免重复定义错误。针对老项目改造,给出渐进式优化方案:处理Qt基础头文件、解决循环依赖、应用标准模板。通过规范头文件设计,可显著减少80%的编译错误,建立清晰的依赖关系,为后续预编译优化奠定基础。文章还提供了可直接套用的标准头文件模板,帮助开发者实现自包含、低耦合、无循环的代码结构。
2026-05-12 17:53:26
411
原创 Qt项目手动替换代码后编译报错?详解moc文件冲突与Git误操作后的终极解决方案
当Qt项目出现满屏moc报错而代码看似正常时,99%的情况是中间文件版本不一致导致的。解决方案口诀:代码乱了别慌张,删除构建目录,重跑qmake,问题迎刃而解。
2026-05-11 17:30:52
365
原创 Qt信号槽连接方式全解析:从Qt4到Qt5的进化,以及新手必踩的“槽函数重复执行”大坑
本文对比了Qt4与Qt5的信号槽连接方式差异:Qt4使用SIGNAL/SLOT宏(运行时绑定、无类型检查),Qt5推荐函数指针方式(编译期检查、支持Lambda)。针对槽函数重复执行问题,分析了自动连接与手动连接冲突的原因,并给出三种解决方案。最后介绍了connect的第五参数(连接类型)在多线程开发中的应用。掌握这些核心机制能有效提升Qt开发效率,避免常见陷阱。
2026-05-11 12:51:27
197
原创 Qt4 vs Qt5 带参数信号槽的连接方式详解
本文对比了Qt4和Qt5中带参数信号槽的实现方式。Qt4使用SIGNAL/SLOT宏进行字符串匹配,存在运行时错误风险;Qt5采用函数指针语法,支持编译期类型检查。重点分析了参数传递规则、重载信号处理方案,并推荐使用Qt5的QOverload模板和Lambda表达式。文章通过滑块联动标签的典型案例,展示了两种版本的代码实现差异,建议新项目优先选择Qt5的类型安全方式,同时提供了处理重载信号和跨线程通信的实用技巧。
2026-05-11 12:48:26
249
原创 Qt 按钮 Lambda 信号槽重复绑定、多次触发 BUG 深度剖析与终极解决方案
摘要:本文针对Qt开发中按钮信号槽重复绑定导致的槽函数多次触发问题,分析了错误现象和核心原因(Lambda表达式生成新对象导致重复绑定)。通过对比无效方案(Qt::UniqueConnection和disconnect失效),提出终极解决方案:在connect前精准断开目标信号的旧绑定。文章提供了可直接复用的标准代码和宏封装优化方案,解决了重复执行、内存泄漏等问题,并强调了数值校验和参数传递等注意事项。该方案具有通用性强、不影响按钮其他功能等优势,适用于各类Qt按钮交互场景。
2026-05-10 22:01:17
373
原创 Qt调试技巧:解决DLL输入点错误指南
Qt调试技巧:解决DLL加载错误问题 当Qt程序报错"无法定位程序输入点"时,通常由Debug/Release版本混用导致。核心问题在于: 症状:Release程序调用Debug版Qt库(如Qt5CoreD.dll),或反之,导致ABI不兼容 解决步骤: 统一构建配置(Debug或Release) 检查项目属性中的Qt库链接(Debug用*D.lib/*D.dll,Release用无后缀版本) 彻底清理中间文件后重新生成 关键点:VS配置需与Qt库版本严格匹配,避免Debug/Relea
2026-04-24 01:19:20
497
原创 深入解析 C++ 完美转发:为什么 `T&&` 能绑定左值?万能引用是如何工作的?
本文深入解析C++完美转发机制,探讨为什么模板参数T&&能同时绑定左值和右值。关键点包括:1)转发引用仅在模板参数推导时成立;2)编译器根据实参值类别推导T类型(左值推导为X&,右值为X);3)引用折叠规则确保语法合法;4)std::forward根据推导结果还原原始值类别。完美转发通过模板推导、引用折叠和std::forward的协同工作,实现了参数值类别的无损传递,是C++泛型编程的重要机制。
2026-01-07 19:17:35
440
原创 深入理解 C++ 右值引用:为什么“有名字的 T&& 是左值”,却仍要使用它?
本文深入解析C++11移动语义中的关键概念:命名的右值引用(T&&)在表达式中表现为左值。虽然看似矛盾,但这种设计确保了安全性,防止同一变量被多次隐式移动。文章从三个层面阐释其价值:1) 区分函数重载,使编译器能识别可移动对象;2) 实现移动构造函数和移动赋值运算符的安全资源转移;3) 支持完美转发技术。核心观点是:右值引用的意义不在于其本身的值类别,而在于它能绑定右值并表达"可移动"的语义。文章最后强调,这种设计是C++在安全与效率间的精妙平衡,并提供了使用建议。
2026-01-07 16:14:03
413
原创 Qt多线程编程:深入理解QThread
摘要:本文深入解析Qt中QThread的使用误区,指出QThread默认只执行run()函数,强调成员函数的调用线程取决于调用位置而非类归属。文章澄清了通过外部函数控制run()状态的可行性,但需注意线程安全。最终推荐Qt官方推崇的Worker+moveToThread模式,该模式实现职责分离、天然支持事件循环且更易维护。核心观点是:QThread应作为线程控制器而非任务执行体,采用对象组合而非继承的方式能有效避免多线程编程中的常见陷阱。
2026-01-07 15:08:38
806
原创 技术小白入门 Git + Gitee:从仓库创建到代码推送(避坑版)
本文提供Git+Gitee完整操作指南,包含环境配置、仓库创建、代码推送和分支管理等核心步骤。主要内容:1.安装Git并配置全局信息;2.创建Gitee仓库并关联本地项目;3.代码提交与推送方法;4.常见错误解决方案(如协议错误、权限问题等);5.分支管理常用指令清单(创建/切换/合并分支等)。文中特别强调推送时的避坑要点,包括HTTPS推送需使用私人令牌、首次推送分支需加-u参数等,帮助开发者快速掌握Git与Gitee协同开发的核心技能。
2025-12-28 16:28:13
1528
原创 Windows SSH免密登录终极指南
Windows系统配置SSH免密登录完整指南:1. 使用GitBash生成密钥对(ssh-keygen);2. 通过ssh-copy-id或手动创建authorized_keys文件部署公钥;3. 管理员权限配置sshd_config启用公钥认证;4. 关键步骤设置严格文件权限(icacls命令);5. 测试连接并排查常见错误。提供一键修复脚本,解决80%的权限问题,确保Windows系统SSH免密登录成功配置。
2025-12-27 15:41:19
1169
原创 Windows SSH服务端一键搭建指南
本文详细介绍了SSH协议的原理与Windows系统下的实践应用。主要内容包括:SSH的基础概念与工作原理,重点阐述了其加密机制和认证方式;Windows系统SSH服务端的安装配置指南,涵盖服务安装、启动、防火墙设置等关键步骤;客户端使用方法和密钥认证的详细流程;高级应用如端口转发和SCP文件传输;以及常见问题的解决方案。文章强调密钥认证的安全性优势,并提供了SSH常用指令速查表,为Windows用户实现安全的远程管理提供了全面指导。
2025-12-27 15:29:33
1646
原创 Qt开发避坑指南:解决VS2019项目重复项错误
摘要:本文分析了Qt+VisualStudio开发中常见的"无法加载具有重复项目项"错误。该问题源于同一头文件被同时声明为<CInclude>和<QtMoc>,导致VS构建系统冲突。解决方案包括:1) 仅保留<QtMoc>条目;2) 确保头文件正确使用Q_OBJECT宏;3) 删除手动包含的"xxx.moc";4) 清理并重新生成项目。最佳实践建议使用QtVSTools插件自动管理MOC处理,避免手动编辑项目文件。
2025-12-22 15:07:19
647
原创 Qt触摸屏按钮优化:解决长按与选择框问题
本文针对Qt工业控制系统中触摸屏按钮存在的长按无法连续触发和显示选择框问题,提出解决方案。通过分析发现,问题根源在于Qt默认将触摸事件转换为鼠标事件,以及Windows系统将长按触摸映射为右键单击。解决方案包括:1)创建自定义按钮类重写event方法,准确区分原生和转换事件;2)调整系统设置关闭长按右键功能。实现效果良好,既能实现长按连续触发,又消除了界面干扰。经验表明,工业界面开发需兼顾功能性、操作体验和跨平台适配。未来可进一步扩展手势支持、优化性能并增强反馈机制。
2025-12-04 21:59:23
491
原创 Inno Setup 脚本编写教程
本文详细介绍了InnoSetup安装包制作工具的脚本编写方法,主要内容包括:1)通过#define定义常量实现统一配置;2)详解[Setup]、[Files]、[Icons]等核心配置段的功能;3)演示如何设置安装路径、文件复制、快捷方式创建等关键功能;4)提供高级技巧和常见问题解答。教程通过完整示例展示如何创建专业级安装包,并强调脚本编写时需要注意的路径处理、系统架构兼容性等问题。InnoSetup凭借其强大的脚本扩展能力和丰富的配置选项,能够满足各类Windows软件的安装需求。
2025-08-12 09:34:55
764
原创 解决cursor“We‘re having trouble connecting to the model provider.........”问题
摘要:当Cursor出现图示问题时,可通过快捷键Ctrl+T打开新聊天窗口继续正常使用。该操作简便快捷,无需其他复杂步骤即可解决常见界面问题,确保工作流程不受中断。注意此方法仅适用于图示特定问题场景。
2025-08-11 16:44:22
793
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅