You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt6 Windows平台下QSerialPort的readyRead信号不触发问题求助

Qt6 Windows平台下QSerialPort的readyRead信号不触发问题求助

我最近在Windows上用Qt6的QSerialPort做项目时碰到了个棘手的问题:明明已经成功建立了COM口连接,也把readyRead信号和我的onDataReceived()槽函数连起来了,但这个接收函数就是从来没被触发过!

数据是用Teensy 4.1通过Serial.write()以高速二进制格式发出来的,我换别的库测试过,数据传输完全没问题,所以问题肯定出在Qt这边的配置或者代码上,有没有大佬能给我支支招?


以下是几个我自己踩坑后总结的排查方向,你可以试试看:

  • 先确认信号槽连接是否真的成功!有时候不小心拼错函数名,或者用了不合适的连接参数(比如Qt6里connect的重载要注意,有没有指定连接类型?),可以在connect语句后打印返回值,要是返回false,那肯定是连接没建立起来,信号自然传不过去。
  • 核对串口参数是否和Teensy完全一致!波特率、数据位、停止位、奇偶校验,哪怕有一个参数不匹配,都可能导致接收不到数据,或者触发不了readyRead信号。比如Teensy设的是115200波特率,Qt这边要是写成9600,那肯定收不到。
  • 试试手动读取数据!在串口连接成功后,加个短延迟然后调用readAll()或者waitForReadyRead(1000),看看能不能读到数据。如果手动能读到,那大概率是信号槽连接的问题;如果手动也读不到,那可能是Windows下的串口权限、驱动问题,或者串口被其他程序占用了。
  • 调整串口缓存大小!高速传输时,Windows的串口驱动可能会攒够一定量的数据才触发readyRead信号,你可以试试用setReadBufferSize()设置一个合适的缓存大小,比如和Teensy每次发送的数据包大小匹配的值。
  • 检查Qt6的串口打开模式!打开串口时有没有用QIODevice::ReadWrite模式?要是只开了只读或者只写,那也会出问题。另外,用QSerialPortInfo获取串口设备时,有没有选对对应的COM口?

备注:内容来源于stack exchange,提问作者Alejandro Fernández Suárez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 17:29:53