Qt 串口调试入门-4:接收区
Qt 串口调试入门-4:接收区

接收区可读性工程:自动清屏、关键字过滤、日志模式与对齐显示

第四次汇报学习笔记:串口工具真正“好用”的关键在接收区。数据量一大就会遇到:卡顿、找不到关键帧、HEX 一行太长看不清。解决思路是:先保证性能,再提升可读性。

当工具开始长期跑数据时,接收区会暴露出三个问题:

  1. 越跑越卡:文本越来越长,追加越来越慢;

  2. 找内容困难:没有过滤,海量输出里找一帧像大海捞针;

  3. HEX 难读:连续输出一长串字节,肉眼无法快速定位。

这一阶段我做了三件事:自动清屏、关键字过滤、日志模式对齐显示。


1. 自动清屏:不是“功能”,是“防崩策略”

QPlainTextEdit 的文本越长,操作成本越高,所以我提供“自动清屏”选项:

  • 勾选后,当 characterCount() 超过阈值就清空;

  • 清空后要把“对齐显示”内部状态也重置(例如表头已打印标记)。

这类优化最好在早期就做,否则后面你会不断遇到“为什么跑 20 分钟就卡死”的反馈。


2. 关键字过滤:同时支持文本和 HEX 匹配

调试串口协议时,你可能输入的关键字是:

  • 文本关键字:ERROROK

  • HEX 关键字:01 030xAA55AA55

因此过滤实现不能只针对 rawText.contains(),而应该准备多种表示:

  • 原始文本(本地编码转 QString)

  • HEX(无空格)

  • HEX(带空格)

用户输入关键字后:

  • 原样在 rawText 里做大小写不敏感匹配;

  • 同时把关键字“规范化”为 HEX(去空格、去 0x、转大写);

  • 在 hexNoSpace 和 hexSpaced 两种形式里都尝试匹配;

  • 不匹配则直接 return —— 但要注意只丢弃显示,不影响计数与保存

这样用户可以用“同一个过滤框”覆盖文本协议和二进制协议。


3. 日志模式:给每条数据加 TIME / TX / RX,并保持对齐

普通模式下,接收区就是“不断追加”,简单直接。但当你需要对比:

  • 某条发送对应哪条接收;

  • 每条帧的时间间隔;

  • HEX 输出中某个字节的位置;

就需要更像“日志”的格式。

我做了一个“日志模式”:

  • 每条记录可选显示时间戳(毫秒级);

  • 可选显示 TX(发送内容);

  • RX / TX 都统一走 appendDisplayFrame(bytes, isTx) 这个入口;

  • 在日志模式下,把 HEX 以固定列数换行,并打印一次表头,让每行都从“第 0 列”对齐。

对齐显示的核心点是:固定列宽 + 固定前缀宽度 否则每行长度不同就会歪,越看越累。


4. 一条统一的显示入口:appendDisplayFrame

我强烈建议:不要在 readyRead 里直接拼字符串显示,显示策略会越来越复杂。

更好的结构是:

  • readyRead 只负责:计数、保存、协议/轮发处理、过滤判断;

  • 过滤通过后,统一调用 appendDisplayFrame(buf, false)

  • 发送时如果选择“显示发送”,也调用 appendDisplayFrame(bytes, true)

这样显示策略(普通/日志、HEX/文本、是否时间戳、是否帧换行)就集中在一个地方维护。


5. 小结

接收区优化让我真正体会到:工具软件不是“把功能堆上去”就完事了。

  • 自动清屏解决性能下限;

  • 关键字过滤解决定位效率;

  • 日志模式 + 对齐显示解决可读性与分析效率;

  • 统一显示入口让后续扩展不会失控。

下一篇会写协议工具:如何把 Modbus RTU 从“字节流”变成“可读的请求/响应”,并做一个独立的 Modbus 工具窗口。

如果对您有帮助的话,能否支持一下博主?
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇