- 博客(20)
- 收藏
- 关注
原创 从目标距离到回波检测:C++/Qt 雷达信号仿真的完整公式推导
基于 C++17 + Qt6 实现雷达脉冲回波仿真与距离检测,详细推导目标距离到传播时延、离散采样、滑动窗口能量检测、Candidate 粗检测、Echo Start 精定位和距离反演全过程,并说明主要参数和经验超参数在实际系统中的含义与调整方法。 从目标距离到回波检测:C++_Qt 雷达信号仿真的完整公式推导…
2026-10-08 10:34:26
803
原创 C++ Qt6 雷达模拟器实战(五):TCP、雷达数据与 Qt 图形界面的完整整合
本文介绍基于 C++17 和 Qt6 开发的 RadarSimulator 项目整合过程,重点讲解 TCP 通信、雷达数据处理、坐标转换以及 QPainter 绘制之间的数据流关系。通过模块化设计,实现一个完整的 Qt 雷达模拟器系统,包含 TCP 控制、目标更新、PPI 显示和历史航迹绘制等功能。
2026-10-02 10:39:58
846
原创 C++ Qt6 雷达模拟器实战(四):使用 QPainter 绘制 PPI 雷达界面
本文介绍如何使用 Qt6 的 QPainter 绘制 PPI 雷达界面,包括距离环、方位刻度、扫描波束、目标与航迹,以及雷达坐标到屏幕坐标的转换与动态刷新。
2026-10-01 18:00:00
577
原创 C++ Qt6 雷达模拟器实战(三):雷达目标、坐标转换与数学模型
本文是 C++ Qt6 雷达模拟器实战系列第三篇,重点介绍雷达目标的数据建模、极坐标与笛卡尔坐标转换、Qt 屏幕坐标映射、目标运动模型、扫描波束命中判断,以及 Detection、Track 和简单位置预测之间的关系。通过这些数学模型,把 RadarTarget 中的目标状态逐步转换为 PPI 雷达界面中的可视化结果,为后续使用 QPainter 绘制完整雷达界面打下基础。
2026-09-30 11:20:30
751
2
原创 优快云 自动给关键词加蓝色链接?我的排查与解决方法
发现关键词自动变蓝↓怀疑 Markdown↓测试富文本仍然存在↓检查页面 DOM↓发现 words-blog / hl-git-1↓确认是最终页面二次处理↓安装 Tampermonkey↓创建屏蔽脚本↓Edge 开启“允许用户脚本”↓刷新页面↓本地恢复普通正文显示右键关键词→ 检查words-bloghl-git-1如果存在类似 class,就可以尝试使用本文的 Tampermonkey 脚本进行本地处理。扩展→ 管理扩展→ 篡改猴→ 详情。
2026-09-30 10:35:05
167
原创 C++ Qt6 雷达模拟器实战(二):TCP 通信与自定义文本协议
本文介绍 C++ Qt6 雷达模拟器中的 TCP 通信与自定义文本协议设计,重点讲解 QTcpServer、QTcpSocket、TCP 分包与粘包、LineBuffer、LineProtocol 以及多客户端独立缓冲区设计,并结合 protocol_test、radar_server_state_test 和 tcp_client_test 展示协议、业务状态和真实 TCP 联调的分层验证过程。
2026-09-29 09:43:31
382
原创 C++ Qt6 雷达模拟器实战(一):项目架构与整体设计
基于 C++ / Qt6 实现 RadarSimulator 雷达模拟器,系列记录项目架构、TCP 通信、自定义文本协议、雷达目标与坐标转换、QPainter PPI 绘制、CMake/CTest 测试及完整项目整合过程。
2026-09-28 16:36:51
636
原创 基于 C++/Qt 的雷达回波信号检测与测距仿真系统
本文介绍一个使用开发的简单雷达回波信号检测与测距仿真系统。项目主要模拟雷达接收到多个目标回波后的信号处理过程,并通过窗口能量检测目标,再对目标回波的起始位置进行精定位,最终根据回波延迟计算目标距离,并使用 Qt Widgets 和 QPainter 将结果进行可视化。目标回波生成↓多目标信号叠加↓加入高斯噪声↓估计噪声能量↓计算窗口能量↓自适应阈值检测↓得到目标候选位置↓局部能量精定位↓计算目标距离↓Qt 可视化。
2026-09-26 19:07:50
859
原创 C++ Lambda 表达式详解:从基本语法到捕获列表
在代码中直接定义一个匿名函数。如果这个函数只使用一次,其实没有必要专门给它起一个函数名。8这里的add是一个变量,它保存了这个 Lambda。add(3, 5);调用它。写法含义[]不捕获外部变量[x]按值捕获x[&x]按引用捕获x[=]外部变量默认按值捕获[&]外部变量默认按引用捕获[a, &b]a按值,b按引用[=, &b]默认按值,但b按引用[&, a]默认按引用,但a按值。
2026-09-25 00:15:00
647
原创 C++ accumulate() 详解:第三个参数类型、0LL 与 1LL 的使用
最容易忽略的就是第三个参数。初始值累加器的类型↓中间计算的类型↓最终结果的类型// int// double避免int类型的中间计算溢出。0LL用于long long类型的累加;用于让乘法计算使用long long。
2026-09-24 00:30:00
746
原创 C++ 位运算常用函数:__builtin_popcount() 详解,以及 long long 类型踩坑
是 C++ 刷算法题中非常实用的一个位运算工具。统计x的二进制中有多少个1。int x;不要因为两个函数名字非常相似,就忽略它们处理的整数位数。long long这里是不是应该使用?算法推导完全正确,仅仅因为popcount使用错误,就可能让最终答案从 16 变成 14。掌握这种“小而容易踩坑”的 C++ 细节,对刷题和面试都很有帮助。
2026-09-23 08:24:17
468
原创 C++ Qt 中 connect() 到底怎么用?一篇彻底搞懂信号与槽的连接方式
但我们也可以自己定义信号。Q_OBJECTsignals:Q_OBJECTpublic:receiver,Sender↓↓Receiver↓所以无论是 Qt 自带信号还是自己定义的信号,核心思路都是一样的。connect()信号发生以后,调用什么函数。[]()});因此,学习connect()第一层:理解“信号 → 函数”第二层:掌握成员函数和 Lambda 两种写法。
2026-09-22 23:16:19
224
原创 Qt Creator 构建套件(Kit)详解:MinGW、MSVC、CMake 到底是什么关系?
名称主要作用Qt提供 Qt 库和 APIQt Creator开发 Qt 项目的 IDEKit一套完整的构建环境配置MinGWGCC 工具链的一种 Windows 环境MSVCMicrosoft C++ 编译工具链CMake配置和生成构建系统C++17C++ 语言标准GDB/CDB调试器Kit 不是编译器本身,而是把 Qt、编译器、调试器、CMake、设备等构建环境组合起来的一套配置。MinGW Kit↓MSVC Kit↓两者都可以开发 Qt 项目。
2026-09-21 17:26:13
406
原创 C++ for循环中声明不同类型变量为什么会报错?
..)问题不是forchar c和int i是不同类型,却试图通过逗号放在同一个声明语句中。char c;int i;c <= 'z';这也是这类编译错误最核心的知识点。
2026-09-21 09:29:20
279
原创 C++数组初始化详解:原生数组与 vector 的多种初始化方式
写法含义示例结果创建空 vector[]创建 5 个元素创建 5 个元素,每个为 10使用元素初始化[1,2,3]使用列表初始化[1,2,3]后v[i]=...先创建再赋值根据赋值结果后动态添加元素根据添加结果创建 3 个元素创建 1 个元素,值为 3创建 3 个元素,每个值为 5创建 2 个元素,分别为 3 和 5// ❌C++ 中数组初始化的写法比较多,但在实际刷题过程中,并不需要一开始全部记住。对于vector() → 经常用于指定元素数量/统一初始值。
2026-09-19 19:43:24
610
原创 C++ Qt项目如何上传到GitHub:以RadarSimulator为例,从Git初始化到Push完整实战
Qt项目│▼git init│▼创建 .gitignore│▼添加 LICENSE│▼git add .│▼git commit│▼GitHub 创建空仓库│▼│▼git push│▼添加 README + 项目截图│▼git add│▼git commit│▼git push│▼GitHub 完整项目本地 Qt 项目 → Git 版本管理 → GitHub 远程仓库 → README 项目展示 → 简历项目链接。
2026-09-19 11:55:03
187
原创 CMakeLists.txt 文件解析
本文详细解析了QtCreator生成的CMakeLists.txt文件,逐行说明其功能:指定CMake最低版本、定义项目名称与语言、查找Qt6依赖、启用Qt标准配置、创建可执行程序并添加源文件、设置Windows/macOS平台特性、链接Qt核心库、配置安装路径及生成部署脚本。整体结构清晰,涵盖项目构建、依赖管理、跨平台支持与部署自动化,帮助初学者理解Qt+CMake项目的配置逻辑。
2026-09-18 10:44:59
241
原创 C++ Qt6 雷达模拟器实战:从 TCP 通信到 PPI 雷达界面的完整项目
为了让客户端和服务端之间能够进行简单、清晰的通信,项目采用了基于文本行的简单协议。MOVE表示操作类型,200 150表示相关参数,\r\n表示一条消息的结束。MOVESTOPGET_STATUSPOSSTATUSERROR等类型的消息。在测试过程中,也专门考虑了:空消息未知命令CRLF半包多条消息连续到达一次接收完整消息等情况。这个项目从最开始的 TCP 协议测试,到后面的雷达目标模拟,再到最终的 Qt PPI 图形界面,是一个逐步完善的过程。
2026-09-16 20:13:30
347
原创 C++报错:non-const lvalue reference cannot bind to a temporary,到底是什么意思?
lvalue(左值)能够代表一个持久存在的对象,并且通常可以取地址的表达式。int a = 10;a这里的a就是一个左值。因为它对应内存中的一个实际变量。&a得到它的地址。a + 111这个11是计算过程中产生的临时结果。它不是一个我们可以直接通过变量名操作的持久对象。int& x = a;合法。不合法。这次报错虽然只有一行,但实际上涉及了几个很重要的 C++ 知识点。int& x = a;可以,因为a是一个真实存在的变量。不可以,因为a + 1。
2026-09-11 07:13:03
196
原创 Visual Studio 初次安装无法使用 #include <bits/stdc++.h>?一篇文章教你彻底解决
无法打开包括文件: "bits/stdc++.h"不要慌。不是标准 C++ 头文件,它主要属于 GCC 的 libstdc++。使用场景推荐方案LeetCode / 算法题新版 Visual Studio 刷题正式 C++ 项目使用标准头文件跨平台项目使用标准头文件非常喜欢万能头根据编译器做条件编译不是“C++万能头文件”,而是 GCC 提供的一个非标准聚合头文件。所以 Visual Studio 默认没有它,其实是正常的。如果你只是刷算法题,使用它完全没问题;
2026-09-07 17:16:23
625
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅