【QML】稳定的串口发送代码

张开发
2026/5/3 22:26:50 15 分钟阅读
【QML】稳定的串口发送代码
现象发指令1→ 没反应发指令2→指令1执行了但指令2没执行再发指令3→指令2才执行这是超级典型的 Qt 串口“缓冲区堆积 发送不完整”BUG 根本原因一句话讲死你的数据只写进了 Qt 缓冲区从来没有真正完整发送到硬件指令1 → 留在 Qt 缓存指令2 → 继续堆积缓存只有当下一次 write 触发时上一次的数据才会被发送出去最新的那一条永远留在缓存里永远不发所以你看到发2出1发3出2永远差一条✅ 为什么 QML 里会这样QML 虽然有事件循环但Qt 串口默认的发送机制是“懒发送”数据先攒着等缓存满了 / 程序闲了 才发你发短指令永远攒不满就永远不发结果就是永远差最后一条发不出去。 终极修复代码直接复制立刻解决把你现在的发送函数强制改成立即发送模式// 修复后的发送函数永不错位、永不丢最后一条voidsendCommand(constQByteArraycmd){if(!serial-isOpen())return;// 1. 写入数据serial-write(cmd);// 2. 强制立即推送到硬件解决“不发”serial-flush();}你只需要加这1行serial-flush();加完后效果发指令1 →立刻执行发指令2 →立刻执行发什么立刻执行什么再也不错位、不丢指令 为什么这样就好了flush()把 Qt 缓存的数据立刻推给驱动没有这两行 → 数据永远在缓存里 →永远差一条 最关键总结**QML 串口短指令 必须加 flush() **不加100% 会出现发2出1、发3出2、永远错位

更多文章