现代C/C++工具链
文章平均质量分 81
以C/C++为中心,多领域实际应用经验为入口,分享工程开发点滴知识。结合代码资源,介绍C++在数据库、网络、多线程、并行计算、可视化呈现等方面的强大威力。笔者默认Qt属于C++:没有Qt的C++是丑陋的,Qt在C++陷入学院派的泛型综合症和固执的迭代器强迫症时,硬是凭着一己之力为C++找回了烟火气。
丁劲犇
五香面蚕豆,麻酱豆腐卤;戗刀磨剪子,钢筋锅换底。修----理伞,有乌龟壳王巴盖拿来卖,甜--米酒----来碗撒汤,尅个烧饼,一两碗友谊巷的豆腐脑,三四个相山庙的夜归人。岁月催银鬓,光阴染发梢,濉河斜见柳,秋雨且潇潇。抱病婉谢红尘宴,遮颜入市觅佳肴。曲终席尽人未散,把酒对月话故交。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用B210在Linux下实时处理ETC专用短程通信数据(3)-SDR平台集成
本文介绍了将ETC信号处理模块集成到taskBus平台的过程。该模块能够实时处理20MHz采样的IQ数据,解析ETC ClassA基础ASK波形和FM0编码,支持上下行链路切换。作者分享了模块的功能设计、代码实现方法,以及在实际测试中的表现。整个系统在高端硬件上运行流畅,处理20M数据时性能优异。原创 2025-08-19 12:40:47 · 576 阅读 · 0 评论 -
Qt Graphs 模块拟取代 charts 和 data visualization的技术测试
Qt 6.10将弃用charts和data visualization模块,功能将合并到graphs模块。这一重大API变化需要开发者注意兼容性问题:1) QML渲染器依赖3D加速,在虚拟机或老旧硬件上性能较差;2) graphs模块强制使用QML混合编程,增加了C++调用QML的复杂度。测试代码展示了如何通过QQuickWidget集成graphs模块,实现动态折线图功能,包括数据刷新和交互事件处理。开发者需评估现有应用对这些模块的依赖,提前规划迁移方案。原创 2025-07-19 15:39:26 · 1045 阅读 · 3 评论 -
用 Turbo Vision 2 为 Qt 6 控制台应用创建 TUI 字符 MainFrame
本文介绍了如何在Qt框架中集成Turbo Vision字符界面库。通过将Turbo Vision的事件循环运行在独立线程中,实现了与Qt主线程的并行运行。作者展示了如何改造Turbo Vision的编辑器示例,使其成为Qt应用程序的一部分,包括: 下载并编译开源的Turbo Vision库 创建Qt控制台项目并配置工程文件 使用QtConcurrent在子线程运行Turbo Vision事件循环 通过多重继承将QObject与TApplication结合 改造编辑器示例代码使其兼容Qt环境原创 2025-07-05 20:13:02 · 735 阅读 · 2 评论 -
在VSCode中借助AI丰富C++Qt应用程序
本文介绍了如何利用VSCode搭配国产AI助手辅助Qt开发。作者对比了VSCode与传统IDE(QtCreator/VS)的差异,指出VSCode凭借开源特性、可扩展性和语言支持优势,成为AI插件最丰富的编辑器。文章详细讲解了VSCode环境下Qt项目的配置流程,包括安装Qt扩展包、CMake工具链选择及调试配置。针对qmake与CMake的取舍,作者分析Qt正逐步向CMake过渡的趋势。最后推荐使用VSCode+CodeGeeX的组合,发挥AI在代码补全和注释生成方面的优势,提升Qt开发效率。原创 2025-06-10 07:26:01 · 1205 阅读 · 0 评论 -
基于Qt的MCP LLM代理服务开发实战:从0到1扩展大语言模型
摘要 本文介绍了如何利用Qt框架开发符合MCP协议的AI代理服务器,实现科学计算领域C++算法与AI工具的对接。文章首先阐述了MCP协议的核心功能,包括服务初始化、工具列表查询和工具调用等JSON-RPC交互流程。随后详细讲解了基于Qt 6.9的开发环境搭建和项目结构设计,重点展示了初始化流程和工具列表查询的代码实现。该方案通过轻量级封装现有C++计算功能,为传统科学计算系统赋予AI调用能力,兼具开发效率和性能优势,是连接科学计算与大语言模型的有效桥梁。 关键词:MCP协议、Qt开发、AI代理、科学计算、工原创 2025-05-28 21:30:21 · 1501 阅读 · 1 评论 -
DeepSeek协助优化-GTX750Ti文物显卡0.65秒卷完400MB float 音频512阶时域FIR
从不熟悉CUDA,到使用CUDA完成了性能还可的滤波器,用了4个小时。我用自己的文物显卡 NVIDIA GeForce GTX 750 Ti (Compute Capability 5.0),只有2G的显存,1G的主频,做时域512点fir卷积,竟然只需0.65秒就跑完100M float数据(411MB文件大小)。最近在学习cuda,准备给我的taskBus SDR添加CUDA的模块支持,以便可以用PC机压榨山寨 B210那56M的带宽。通过反复迭代,得到了希望的结果。原创 2025-03-30 17:15:13 · 1342 阅读 · 0 评论 -
为msys2 qtcreator 添加minimap插件显示滚动条缩略图
minimap插件是KDE和VS里非常好用的滚动条插件,但是一直以来,QtCreator里都没有默认安装。近期有国外大佬 cristian-adam已经在github上更新了最新的版本,可以用了!本文介绍了安装方法,效果,以及概略介绍了工作原理。原创 2025-03-03 08:00:00 · 341 阅读 · 0 评论 -
国产OS上完整编译Qt5.15、搭建基本开发环境需要的库
近期有师弟问我国产OS安装Qt5.15编译老是不完整,不是没声音,就是没视频,或者没有xcb。通过QEMU模拟Arm64,闲来20几天摸索,完整编译了Qt5.15,并编译成功了我的SDR玩具taskBus。使用DeepSeek,协助生成了包的列表.原创 2025-02-23 13:42:14 · 983 阅读 · 0 评论 -
在无GUI的Linux系统中使用字符图案和VNC运行Qt Widgets程序
大部分服务器并没有GUI,运行的是基础的Linux系统,甚至是容器。如果现实情况不允许我们安装图形界面,是不是就完全无法使用这些程序了呢?答案是否定的。本文介绍如何在字符界面下使用Qt GUI程序。原创 2025-01-01 08:30:00 · 787 阅读 · 0 评论 -
慧眼识珠-基础科研团队可选择MSYS2全栈工具链
计算机是碳基大脑的延伸,选择合适的工具,会显著降低学习成本,提高你的效率。本文介绍了非IT行业的工程师如何选择工具链的技巧。原创 2024-12-22 09:15:10 · 1153 阅读 · 0 评论 -
让 Win10 上网本 Debug 模式 QUDPSocket 信号&槽 收发不丢包的方法总结
我们探讨了不少UDP丢包的解决方法,其实,经过几年的摸索测试,真正的方法非常简单, 无需修改代码。通过本文的设置,赛扬处理器的老上网本,使用 Qt QUupSocket和信号-槽时,也能1包不丢。原创 2024-12-11 20:56:37 · 947 阅读 · 0 评论 -
解决2024-11 static版本MSYS2 Qt6.8 mingw64/ucrt64 错误和windeployqt的小问题
很久没有pacman我的msys2了,今天当我升级MSYS2 到2024年11月时,静态编译的UCRT64 和MingW64 版本的Qt6 都不工作了, 此外 Qt5 的 windeployqt也有依赖问题。原创 2024-11-19 20:39:55 · 1030 阅读 · 1 评论 -
使用taskBus串口操作LORA设备收发消息并获取LORA波形
LORA是一种低功耗物联网协议,最近5年越来越得到业界的关注。正好最近在给taskBus添加串口、原始TCP\UDP三类接口,以便更好的和物联网设备进行M2M交互,这为LORA模块测试提供了便利。采用业余软件无线电平台taskBus的串口模块,可以方便的操作LORA模块,并利用USRP 记录波形。借助OCTAVE,进行相位差分,获得了LORA的线性调频图案。原创 2024-10-08 08:45:00 · 845 阅读 · 0 评论 -
基于准静态自适应环型缓存器(QSARC)的taskBus万兆吞吐实现
准静态自适应环形缓存器(Quasi-Static Adaptive Ring Cache)是taskBus用于数据吞吐的软件技术。使用该缓存器,基于EPDR的业余软线无线电平台taskBus可在Linux 系统 i7 6700K 4GHz下达到3GBps(24Gbps)的总交换能力。该交换能力被各个通道均分,共同支撑taskBus平台按照工程的连接关系,把各个生产者产出的数据包及时、完整、有序地输送给消费者。当然,这种架构存在木桶效应,且仍旧距离挑战吞吐能力极限有很大距离。原创 2024-09-08 20:26:34 · 1253 阅读 · 1 评论 -
taskBus的设计局限和吞吐能力测试
在前文中,我们介绍了EPDR,以及使用该技术驱动的taskBus。已有玩家通过踩坑证明,进程管道交换数据时间延迟大,构造时间敏感系统难。除非采用传统的紧耦合设计及更大的颗粒度,否则很难在期望的时刻执行正确的动作。为了不给读者造成困扰和不必要的尝试,通过此文明确这个技术以及相应平台的局限,并给出可能满足上述需求的解决构想。经过测试,最佳成绩在 i7-10700U 笔记本上达到,整体吞吐3GBps,单路1.2GBps,平均延迟2ms。原创 2024-08-23 11:35:54 · 1242 阅读 · 1 评论 -
为taskBus业余软件无线电平台完善自启动和自动运行功能
taskBus是一款我和朋友们一起开发的业余软件无线电平台。因为很懒,一直以来,运行一个tbj文件,都需要打开、运行这些步骤。若要自动运行,需要依靠命令行模式的 taskbusConsole来执行。其实,想要GUI程序通过命令行打开文件,也是最基础的操作。但是这个功能竟然一直都没有实现。今天,就来实现一下。原创 2024-07-19 10:10:12 · 1371 阅读 · 0 评论 -
使用RTL-SDR及USRP B210在业余软件无线电平台taskBus绘制船舶AIS广播
在业余软件无线电领域,比较入门的玩家也能通过等成品软件收听广播、接收飞机、船舶的位置。但是,这些软件对具体的算法的封装往往很深,编译起来依赖项巨多,让我们搞不清楚究竟是怎么实现的。本文通过改造两个C/C++开源代码,基于Qt的自建业余软件无线电软件taskBus和自建的地图引擎qplanetosm实现从波形接收到地图绘制的全栈流程。在河道进行测试,可以顺利接收小船的AIS。原创 2024-07-01 09:15:00 · 1352 阅读 · 0 评论 -
编写工具调用windeployqt+ldd为msys2 Qt应用程序生成完整发布包
在msys2环境下,想找齐Qt程序依赖的库非常繁琐。本文开发一个Qt工具,在msys2开发模式下,帮助程序员快速生成一个绿色版的完整发布包。该工具首先调用windeployqt找齐Qt的直接依赖,而后递归调用ldd,为每个库找齐依赖树。使用该工具,可以立即发布绿色版的msys2应用包。原创 2024-06-17 10:45:00 · 1377 阅读 · 0 评论 -
使用 MSYS2 Qt6 发布绿色版的SDR软件无线电应用
当您使用Qt创建Windows应用程序时,您通常需要将一些Qt库和其他依赖项打包到您的应用程序中,以确保在其他计算机上运行时具有所需的依赖项。由于特别喜欢路径无关的绿色软件,自己总想着找个办法,使得SDR程序拷贝到一个崭新的计算机上直接可以点开运行,并驱动我的山寨USRP B205mini。本文介绍实现这一技术的思路和细节。原创 2024-05-10 10:30:00 · 2686 阅读 · 0 评论 -
解决 MSYS2 Qt 6.7 默认 stylesheet 在 windows 11 下的显示故障
MSYS2 升级到 Qt6.7.0,发现显示故障,所有Qt6程序以及 QtCreator的SpinBox都显示不全,Combox的底色不对。使用Qt的命令行选项--style fusion 可以选择其他主体暂时绕过该 BUG原创 2024-04-13 19:33:21 · 719 阅读 · 0 评论 -
开源玩具总动员-本博客的知识关系图
作为一个非全职编程爱好者,基本是把计算机周边当做高档大玩具来玩的,顺便带着有兴趣的学生搞一搞学习。这篇文章作为全站的一个导航篇,把本博客的主干要点汇聚一下。原创 2024-03-06 20:56:19 · 1100 阅读 · 1 评论 -
【转载翻译C++之父文章】在纷繁多变的世界里茁壮成长:C++ 2006–2020
这是 C++ 之父 Bjarne Stroustrup 的 HOPL4 论文的中文版。HOPL 是 History of Programming Languages(编程语言历史)的缩写,是 ACM(Association of Computing Machines,国际计算机协会)旗下的一个会议,约每十五年举办一次。Bjarne 的这篇论文是他为 2021 年 HOPL IV 会议准备的论文,也是他的第三篇 HOPL 论文。转载 2024-02-26 17:19:56 · 696 阅读 · 1 评论 -
使用 C++23 协程实现第一个 co_yield 同步风格调用接口--Qt计算排列组合
在C++23的协程特性里, co_yield 用于从协程执行过程中返回值。这个功能乍一听起来很奇怪,网上的例子大多是用一个计数器来演示多次中断协程函数,返回顺序的计数值。这看起来毫无意义。其实这个功能主要想演示的就是协程 co_yield 具备打断一个函数的执行,并多次返回值的能力。这种能力允许实现一种隐式状态机,每次使用时,返回下一个状态。这对于极为复杂的状态计算来说,是很有用的。它(协程)避免了显式的设置状态记忆句柄,大大简化了实现难度。原创 2024-02-26 06:50:25 · 848 阅读 · 0 评论 -
使用 C++23 协程实现第一个 co_await 同步风格调用接口--Qt计算文件哈希值
C++加入了协程 coroutine的特性,一直没有动手实现过。看了网上很多文章,已经了解了协程作为“可被中断和恢复的函数”的一系列特点。在学习过程中,我发现大多数网上的例子,要不就是在main()函数的控制台程序里演示yeild,await, resume的特性,要不就是讲述很多概念,很少有演示协程究竟如何把异步变成同步调用的。本次,我们就通过一个简单的计算文件哈希值的例子,来演示如何进行协程操作。原创 2024-02-22 13:15:02 · 1894 阅读 · 0 评论 -
QCoro: Qt C++ 20 协程库介绍
C++20 推出了协程的实现(协程是一种线程内的快速执行序切换功能,比回调函数调用起来要简单。是 Qt 的一个协程库,利用C++20的特性,可以显著简化以前用信号-槽回调才能完成的操作。代码可从下载。原创 2024-02-03 19:24:46 · 4169 阅读 · 0 评论 -
Qt Desktop Widgets 控件绘图原理逐步分析拆解
Qt的一个风格按钮的点线面是如何绘制到屏幕上的呢?我们通过详细阅读Qt6.6源码,感受一下Qt从0开始做轮子的绘图过程。这种实现完全可以作为操作系统的GUI部分而存在,正如Qt本就是KDE桌面的基础工具链。原创 2023-12-10 20:52:57 · 1583 阅读 · 0 评论 -
使用MSYS2的静态Qt版本进行Widgets项目编译时需要注意的问题
需要编译一个静态版本的应用程序,并用upx进行压缩,以便减少携带的动态链接库,生成每个文件不超过10MB的轻量级绿色发布包。使用动态库不利于发布。准备发布的环境,是学校的教学中心的学生计算机。学生计算机的每一台机器都可能安装有不同版本的Qt,且时常污染环境变量(PATH),导致链接了其他版本Qt的程序启动时遇到问题。不能为每一种Qt发布包编译一个发行版。本文介绍使用msys2编译静态Qt6程序的注意事项。原创 2023-10-29 14:39:36 · 775 阅读 · 0 评论 -
Qt Signals & Slots VS QEvents - Qt跨线程异步操作性能测试与选取建议
Qt跨线程异步消息用信号-槽还是Event?他们与直接函数调用的性能比较如何?我们通过对taskBus实时性改造中遇到的测试进行讲解,对比信号-槽与事件机制在多线程POSTMsg上的性能差异。尤其是范例代码对1-多、多-1的信号-槽连接分别进行测试。测试发现,事件调用的开销与单线程直接调用几乎一样。单点信号-槽调用性能是直接调用的50~80%左右,若槽很多,则性能直线下降。原创 2023-10-23 21:54:25 · 532 阅读 · 0 评论 -
地理测绘基础知识(2)-椭球最短距离计算
本篇,主要介绍已知A\B两个点的经纬度,如何求取椭球上的最短距离、路径。要讨论方向,会引出两个概念。第一个是切平面坐标系,这是讨论"方向"的基础。第二个是运动,即考虑不同时刻、不同位置之间的关系与变化规律。原创 2023-08-13 21:06:08 · 1273 阅读 · 0 评论 -
地理测绘基础知识(1) 坐标系经纬度与ECEF直角坐标的基本换算
我们目前最常用的全球坐标系是WGS-84坐标系,各种手机、地图基本用经纬度来标记位置。然而,经纬度对于空间的计算是很复杂的,需要很多三角函数操作。平面直角坐标系利用向量的运算,可以非常方便的计算角度、距离等参数,在实际应用中往往作为中间计算的工具。目前用到的很多GIS、遥感与测绘工具里都有这种功能,比如利用 libproj、RTK等工具,直接进行转换。为了教学方便,我们还是从头开始,实现这这种坐标的转换。原创 2023-08-11 21:00:34 · 5000 阅读 · 10 评论 -
现场工程师宝典-流式处理的异常现象以及提高吞吐能力的常见优化策略
流式处理区别于按包处理,指的是对处理者而言,面对的是逻辑上无头无尾的数据流。因此,在提取数据流中的包时,就需要遵循其内在的格式,进行头部捕获、提取、校验。然而,如果不考虑TCP等流式数据的异常情况,而简单的编程,会在性能、稳定性上踩坑。本人作为资深现场工程师,协助开发团队处理过各种千奇百怪的流式处理问题,本文把其中较为常见的一并总结一下,希望对避坑有所帮助。原创 2023-07-07 20:08:48 · 592 阅读 · 0 评论 -
避免滥用Qt信号与槽——改进taskBus 平台以吞吐20M IQ采样带宽
软件无线电平台是一款依靠 stdin-stdout进行数据吞吐的教学平台。在平台创建之初,主要使用 RTL-SDR进行简单的窄带接收应用,并没有考虑采样率超过1.8M的情况。引入 USRP B210/B205mini后,采样率瞬间提高到2M以上,此时,使用信号与槽进行吞吐时,性能问题就暴露无遗了。本文详细介绍如何该平台的实现问题,以及补救策略。补救后,双路可直接吞吐20MHz采样率的16bit IQ信号。2024年,经过专门测试,理想吞吐率在i7处理器上达到3GBps,文章尾部含有链接。原创 2023-06-24 20:33:52 · 1598 阅读 · 0 评论 -
用于小规模低成本场景的kafka + eCAL架构设计
Kafka作为存储、性能兼备的消息队列,适用场景很多,伸缩性也很强。如何调节kafka的配置参数,以及设计专题、分区的数量、物理位置,很大程度上影响到整个架构的成败。很多文章是站在数据中心的角度来谈kafka的配置,而对于小团队,往往只希望把Kafka作为一个跨进程、可追溯的隔离器来使用,取代繁琐的文件或者自定义TCP/UDP接口。此时,单独讨论这种场景就显得有必要了。本文介绍了在磁盘与网络带宽都捉襟见肘的情况下,如何使用两种消息队列综合设计架构,避免瓶颈的方法。原创 2023-03-20 20:28:30 · 562 阅读 · 0 评论 -
基于 librdkafka C API 的三种seek随机访问方法
介绍三种seek offset的方法。kafka seek的时机和特点,是由它的原理决定的。只有消费者已经assign到确切的partition,才能修改offsetassign partition的行为可以是手动的(第一种),也可以是自动的(2、3)当自动assign时,必须选取一个时机,获取当前的分区号,才能设置offset最佳的方法是联合使用1、2、3这三种策略。原创 2023-03-20 13:39:03 · 630 阅读 · 0 评论 -
基于Qt WebEngine 的Web仪器面板GUI程控技术
随着IIoT的发展,很多工业仪器也具备了远程管理的GUI。与早期使用串口进行命令交互不同,这些GUI可以直接在远程呈现数据。作为希望对仪器、软件进行二次开发的小公司来说,会遇到GUI人工操作转自动化的需求。在无法通过串口等传统接口进行自动操作的情况下,就只能考虑GUI自动化。在现场工程师领域,常见的GUI自动化程控技术主要分native界面与Web界面两类。用QtWebEngine可以非常从容地应对Web GUI自动化。原创 2023-03-09 13:47:49 · 2409 阅读 · 0 评论 -
EthernetOnTCP--基于Qt QSslSocket 套接字在PCAP 集线器上实现以太网隧道
我们使用PCAP建立了本地的软件集线器(Hub)。考虑到较远距离的跨车间调试,有必要使用Tcp连接构造一个以太网的隧道,使得两个车间之间的调试设备可以虚拟的连接在一个Hub上。使用QSslSocket可以方便的实现这个功能。同时,通过控制回放的范围,可以精确控制PCAPHub工作在交换机-集线器的混合模式下。原创 2023-01-14 17:18:53 · 1069 阅读 · 2 评论 -
基于PCAP搭建软HUB实现物联网在线调试
在调试嵌入式物联设备时,尤其是在多个以太网物联设备交错通信的情况下,很难通过在捉襟见肘的嵌入式系统上进行数据记录与调试。如果设备连接的是交换机,在空闲端口是无法看到所有其他端口上的数据的(广播除外)。PCAPHub基于PCAP,构建了一个软集线器。进行调试时,把待调试的工业设备从工业交换机断开,并临时接入在调试工作站的网卡上。这样,就可以用Wireshark抓到所有参与调试的设备数据。原创 2023-01-09 07:45:00 · 967 阅读 · 0 评论 -
使用 Qt for Android 获取并利用手机传感器数据(下篇)使用C++实现功能
在上一篇,我们搭建了开发环境。本篇,使用C++代码真正实现Android功能。我们使用UDP协议从手机上指定发送的目的地、端口。我们建立一个Qt的Widgets程序,添加 position, sensors模块。枚举传感器并建立界面,通过Qt的Sensors可以枚举到传感器的取值。原创 2022-12-03 17:58:41 · 3303 阅读 · 4 评论 -
使用 Qt for Android 获取并利用手机传感器数据(上篇)开发环境省心搭建
现代手机拥有许多传感器,包括地磁、姿态、GPS、光照、温度、气压、摄像、声音、电磁等,完全就是一个高度集成的科学仪器。不夸张的说,一部手机加上一个外围的计算机和控制系统,做一个功能较强的自主移动机器人并不是不可能。但是,很多APP都只是局限于自身的功能,并不喜欢把传感器数据泵出来给其他设备分享。即使有,也是收费的。有没有可能自己做一个小APP,获得所有的手机传感器数据,榨干手机的感知能力呢?实际上实现起来并不困难,甚至连界面都不需要。笔者准备涉足一下从未实操过的App开发,把旧手机的传感器数据分享出来。原创 2022-12-01 21:59:20 · 4779 阅读 · 0 评论 -
使用Qt轻量的QTextBrowser为taskBus SDR显示丰富的图文帮助
最近准备为软件无线电平台添加集成文档功能。毕竟模块变多了之后,简单一页纸的小文档对正确想起来如何使用模块功能意义很大。对于一款极简的轻量级SDR产品,我们希望taskBus的文档继续保持极简的风格,支持txt纯文本、简易Markdown和本地html。QTextBrowser是一款轻量但强大的本地富文本显示控件,本文介绍这种控件在帮助文档浏览中的运用。原创 2022-11-05 19:39:48 · 1982 阅读 · 0 评论