- 博客(124)
- 资源 (4)
- 收藏
- 关注
原创 上位机开发常见问题思考
1.日常思考使用配置软件还是硬编码在程序中?最近在开发一款兼容多款设备的上位机软件,开始用了很多配置文件,包括所有业务对象的生成、对象的配置参数等,重度依赖于配置文件,每次功能更新都要同步更新使用的配置文件,而且配置复杂,很容易出问题。现在准备将大部分配置写在代码中,将IP地址、测量参数等需要个性化配置的参数放在配置文件,这样大大减少了配置软件的难度。实现业务载体从配置文件到代码的转变。配置文件全部由代码生成比较麻烦,而且json的自由度比较高,全部由C++生成也感觉不太优雅,考虑将配置文件放入Qt
2024-10-27 19:16:11
826
原创 重读《重构》:重构、设计模式与 TDD,是程序员最该守住的基本功
重读《重构》让我深刻体会到:好书需反复品读,不同阶段收获各异。重构、设计模式与TDD三位一体,构成技术核心,掌握20%关键技巧即可解决80%问题。在AI浪潮下,基本功才是护城河。选择热爱之事并坚持,方能在时代变革中立于不败之地。
2026-10-27 06:46:29
157
原创 XRD 入门:从 Kα 双峰说起
XRD图谱中的Kα双峰源于L₃→K(Kα₁)与L₂→K(Kα₂)的跃迁,由自旋-轨道耦合导致能级分裂。Kα₁强度约为Kα₂的两倍,波长更短,故在图谱中表现为左高右低的双峰。双峰分离程度随衍射角增大而加剧,且重元素因更强的自旋-轨道耦合使分裂更显著。理解这一现象需结合能级结构、选择定则与布拉格公式,是解读XRD图谱的基础。
2026-09-23 11:51:10
111
原创 Qt 上位机开发:最近一年关于软件架构的一些思考
摘要:作者分享了近年的工作感悟与技术成长历程。从谱育科技的规范训练到现公司XRD设备开发的挑战,逐步完善了基于Qt的上位机框架,融合设计模式与多线程优化。反思AI工具应辅助而非替代编程思考,强调夯实基础的重要性。未来计划深耕仪器仪表领域,构建技术护城河,并借鉴价值投资理念,平衡职业发展与长期规划,保持技术热情,追求"做对的事,把事情做对"的人生准则。(150字)
2026-07-02 14:43:50
301
原创 记一次软件性能优化实践
本文记录了一次软件性能优化实践,系统实时数据处理性能从1000ms降至20ms。作者通过精确计时定位到性能瓶颈在于高频循环中的重复插值计算(50000×4000次循环/批)。优化方案采用缓存机制,将O(N×M)复杂度降为O(N+M),使单次处理耗时从2000ms降至20ms,提升99%以上。关键经验:1)先测量再优化;2)警惕重复计算;3)缓存是有效手段;4)大数据量会放大问题。结论指出性能问题多源于"做了不该做的重复计算",而非单纯代码执行慢。
2026-04-30 10:03:00
653
原创 XRD衍射谱面探数据拼接实践(python实现)
本文介绍了一种基于Python实现的XRD衍射谱面探数据拼接方法。针对现代二维面探测器输出的多张.tif图像数据,提出通过列角度对齐将其转换为连续的2θ衍射图谱。核心算法包括:1)解析图像中心角度;2)计算每列对应物理角度;3)建立统一角度网格进行数据累加。该方法实现了将256×256的面探图像序列拼接成完整的衍射图谱,最终输出包含角度-行像素-强度信息的二维矩阵。实验结果表明,该方法思路简单、易于移植,能有效处理10°-90°范围内的XRD数据拼接问题。完整代码已开源,适用于各类面探测XRD数据的处理需求
2026-02-27 15:21:02
568
原创 Qt + Python 算法集成的一种低耦合实践:FastAPI 服务化方案
Qt 主程序├─ QProcess 管理 algo_service.exe├─ HTTP 调用 /health /infer /shutdown└─ UI 显示算法状态与日志入口├─ FastAPI 提供算法接口├─ 独立进程,独立生命周期└─ 可随时替换或升级。
2026-01-19 08:18:10
632
原创 VSCode配置Qt6开发教程
本文介绍了在VSCode中配置Qt6开发环境的详细步骤。首先通过QtConfig创建Qt项目,选择构建组件和CMake,并将项目中的Qt5改为Qt6。然后配置C++编译参数,包括设置cl.exe路径和包含Qt6的include路径。最后介绍了如何设置Qt Designer的两种方法。配置完成后即可在VSCode中正常进行Qt6项目开发,包括代码提示、编译运行等功能。
2025-12-11 22:10:32
968
原创 C++面试常见问题
的《面试基础题关键词 + 一句话解释》,适合你这种做系统/架构型开发者提前准备。每个关键词我尽量都加入一个简短场景或备注,方便你在项目中“活用”而不只是死背。你可以打印下来,或者做成手机备忘,面试前快速复习。
2025-11-07 13:59:36
536
原创 Qt 中 OPC UA 通讯实战
最近在项目中用到了opc ua通讯,主要就是客户的设备状态通过opc ua发布出来,我们通过读取定义好的Tag获取客户设备的实时运行状态,达到和我们自己设备联动的目的。
2025-09-15 16:54:23
596
1
原创 记一次QCoreApplication::processEvents(QEventLoop::AllEvents,10);导致的界面死锁问题
问题点原因本身不阻塞不是真正的“wait”,只是事件循环_mutex被主线程持有事件调度过程中再次尝试获取锁,阻塞同一个对象被主线程多个入口调用(按钮、定时器)高风险结构,尤其涉及锁时test()是长时间调用会阻塞主线程 UI 事件调度你当前的test()在主线程反复执行,再加锁的前提下,非常容易导致“假死”或“逻辑死锁”现象。建议是否推荐在主线程使用实现“等待”❌ 强烈不推荐使用延迟✅ 可以接受(但不影响 UI)使用QThread执行test()✅ 推荐(稳定可靠)
2025-07-22 14:15:34
558
原创 御微半导体面试总结
一共有四轮面试,分别是技术面试、业务部门领导面试、HR面试、HR薪酬面试,技术面试和业务部门面试还挺快的,大概一周多,后面两轮HR面试搞了快三周,感觉是在挑人,等最后一轮面试的时候自己都不想去了,这流程前前后后一个月,黄花菜都凉了,去了也怕卡你试用期。薪资方面在合肥还是挺有竞争力的(虽然最后给的也不是很高),工作强度更有竞争力,每一个面试都在晚上9点以后,这去了不得天天加班,最后就婉言拒绝了。
2025-06-11 21:37:05
3343
2
原创 基于 GitLab CI + Inno Setup 实现 Windows 程序自动化打包发布方案
本文介绍了一套基于GitLab CI的Windows桌面应用自动化构建与发布方案。通过整合VS2015、Qt 5.9.4、Inno Setup等工具链,实现了从代码提交到最终发布的完整流程。关键特点包括:仅在打tag时触发构建、自动版本控制(PackTest_版本号_日期_setup.exe)、依赖管理(通过dll_lib目录集中管理依赖)、自动发布到共享目录。方案包含三个核心文件:.gitlab-ci.yml控制CI流程、deploy脚本处理依赖和打包、Inno Setup配置文件生成安装包。该方案实现了
2025-05-29 11:17:43
1265
原创 Qt多线程编程实践总结:QtConcurrent与moveToThread应用场景对比(可以说都是干货)
本文总结了Qt中两种常见的多线程实现方式:QtConcurrent::run和QObject::moveToThread,并分析了它们的适用场景和特点。QtConcurrent::run适合执行无状态的小任务,利用线程池自动管理线程,但不适合涉及对象状态的操作。moveToThread则适合长期运行的后台任务,能够处理Qt信号槽和事件循环,确保线程安全。文章还探讨了QObject的线程归属问题,指出对象的方法调用行为取决于线程亲缘性和调用方式。
2025-05-13 15:07:58
902
原创 Qt ModbusSlave多线程实践总结
这种方法进行流程等待也没啥问题。但是在slave模式下,使用这种模式就会造成事件无法正常回调,在等待过程中没法回复请求,导致master设备卡死,最终使用多线程解决的该问题。最近项目中用到了ModbusSlave,也就是Modbus从设备的功能,之前用的基本都是master设备,所以读取数据啥的用单线程就行了,用。这里遵循Qt多线程最佳实践,使用。
2025-04-25 17:38:24
612
原创 Qt上位机编程命名规范-执行版
主要规范原则参考Qt上位机编程命名规范。考虑跨平台性,全小写是一种约定俗成的风格,在许多大型开源项目中(如 Linux 内核、Python 标准库)被广泛使用。1.2.文件夹和pri文件命名通常小写、下划线分开:2.代码命名规范2.1.类名规则:使用 PascalCase(首字母大写,每个单词的首字母都大写)。示例:2.2. 变量名规则:使用 camelCase(小写开头,每个单词的首字母大写)。成员变量:静态变量:局部变量:2.3. 函数名
2025-03-04 14:38:29
1414
原创 基于QScriptEngine解释器的数值自定义计算
data中保存元素数据,类似Fe-1.2,Cu-2.4,Mn3.5,QStringList中的为 Fe/Cu ,Fe/Cu-Mn,Fe*Cu+Mn ,如何利用解释器或者其它简单的方法完成这个需求?
2025-02-08 15:44:08
319
原创 上位机工作感想-2024年工作总结和来年计划
其实今年也没做啥项目,一半时间都花在重构老软件上,没有产品经理,没有项目经理,所有的东西都靠两个软件自己来,做完之后也没有业务测试,测试也是我自己。第一是分层处理,将整个软件分为通讯层、设备层、控制层、控制面板层,每个层抽象出几个具体业务接口,上层通过接口调用下层,达到解耦的目的,所有业务通过指令模式封装在一个个对象中,不同的业务就是不同指令的组合,整个模式非常灵活。
2025-01-18 18:09:34
1209
原创 ccd和cmos光谱仪对比
光谱仪中既可以使用也可以使用作为图像传感器,具体选择取决于光谱仪的应用场景和性能需求。这两种传感器各有优缺点,在不同类型的光谱仪中发挥不同的作用。
2025-01-06 10:28:20
1040
原创 基于WPF的磁盘管理助手(DiskClearHelper)
现场电脑磁盘占用率过高,一个一个文件夹取查看大小又太麻烦了,就想着用wpf开发一个磁盘清理助手。
2024-12-31 08:46:03
325
原创 QByteArray初始化总结
固定数据(不含\0是最佳选择,简单且可读性强。固定数据(可能含\0使用并指定长度。使用append或,视数据复杂性选择。如需复杂数据流处理,优先选择。还是在上位机开发中使用最为简便。根据实际需求,选择最合适的方案即可。
2024-12-16 13:38:58
1092
原创 基于Qt的上位机通讯库设计及实现
做Qt上位机已经有两年的时间了,上位机主要是和下游器件打交道的,通过modbus、tcp、串口等协议来控制这些设备,通过一定的时序控制,完成所需要的工作流程。这其中最重要的就是通讯了,上位机开发过程中的相当一部分问题都是通讯问题导致的。如何总结、抽象出一套稳定的通讯逻辑,在上位机开发中尤为重要。
2024-12-15 10:44:10
987
原创 Qt上位机编程命名规范
如果是跨平台工具类或开源项目,建议使用全小写风格项目中应统一命名风格,无论是全小写还是大小写混合,以避免混乱在团队开发中,可在项目初期通过编码规范文档明确文件命名规则规则:使用全大写,单词间用下划线分隔(SNAKE_CASE)。示例1024Qt 内置宏以Q_开头,如Q_OBJECTQ_PROPERTYQ_OBJECTpublic:~MyClass();signals:private:___.json示例:(开发环境配置文件)
2024-11-23 11:26:19
1582
原创 Qt include规范
按照系统头文件Qt 库头文件自定义头文件的顺序组织#include。避免包含整个模块,只包含需要的头文件。使用前向声明来减少不必要的依赖。使用 #pragma once或包含保护来防止重复包含。根据 Qt 模块划分头文件,组织清晰。避免冗余和重复的包含。遵循这些规范可以保持代码清晰、易维护,并提高编译效率。
2024-11-22 15:33:53
1033
原创 Qt交叉编译x86和arm心得
最近一直在Linux上开发qt程序,主要工作是在x86的Ubuntu上开发编译调试程序,确定没有问题后交叉编译到arm的linux系统上运行。
2024-11-22 15:30:00
1257
2
原创 浅谈表驱动法的应用
简单的表驱动法是表驱动法的一种简化应用,适用于条件较少、逻辑不复杂的场景。它仍然通过表格或数组的形式来管理条件和对应操作,但实现上更加直接和轻量。假设你正在开发一个简单的命令行工具,它可以处理几个基本命令:启动、停止、重启和退出。我们可以通过简单的表驱动法来实现命令与其对应处理函数的映射。这种简单表驱动法可以在很多小型项目中起到简化逻辑的作用,代码更加清晰,也易于维护和扩展。例子:简单的命令解析器。
2024-11-11 07:26:28
425
原创 《ASP.Net Core技术内幕与项目实战》读书笔记_1
这一章主要说的是.Net Core、.Net Framework、.Net Stanard三个之间的关系。通俗来讲就是Core是新出的、能跨平台,Framwork是老版的、不能跨平台,Standard是为了在Framework、Core、Xamarin中统一库的使用而定制的规范,以便于开发出来的库可以在多个平台公用,是一个规范。在新的.NET 5以后,微软将几个平台合并了,就没有Standard这一说了。
2024-11-07 13:45:54
663
原创 Linux创建sh脚本,实现全局调用
假设你已经创建了一个名为 myscript.sh 的脚本,并希望它可以在任何地方通过 myscript 来运行。
2024-10-18 06:54:48
1031
原创 Qt常见问题
内存泄漏,不用的指针一定要记住删除,可以考虑使用一个单例模式来创建、保存、销毁指针对象,这个单例负责给其他对象使用该对象。QPrcocess不能在后端线程调用,会导致软件闪退
2024-09-11 20:32:41
485
原创 Win7 配置Oracle 11G R2、PLSQL Development、添加用户名、远程访问数据库
本教程所有操作均在VMWare虚拟机上操作,Oracle这种又难装、又难卸、污染性这么大的程序,怎么会让他出现在我的生产环境中呢?自己在虚拟机上新建了一个Win7_x64的系统,进行Oracle安装测试。
2024-08-27 13:32:40
1030
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅