Qt串口通信接收数据不完整的解决方法
2016-03-17 16:38
309 查看
在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况。因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不保证一定是当前所发数据的起始部分。因此串口通信双方在通信前应制定好通信协议,规定好数据的起始和结束标志,串口当读到完整的起始和结束标志之后,才认定读完一条完整的数据。
本例中用串口定时发送当前时间,用"#"表示数据的结尾,定时时间为0毫秒,即能发多快就发多快。
//发送
本例中用串口定时发送当前时间,用"#"表示数据的结尾,定时时间为0毫秒,即能发多快就发多快。
//发送
void Widget::slotSendData() { QByteArray temp; temp.append(getCurrentTime()); temp.append("#"); serialPort->write(temp); }//接收
void Widget::slotReadData() { QByteArray temp = serialPort->readAll(); if(!temp.isEmpty()) { byteArray.append(temp); if(byteArray.contains("#")) { ui->textEditReceive->setText(byteArray.split('#').at(0)); byteArray = byteArray.right(byteArray.length()-byteArray.indexOf('#')-1); } } }源码链接:http://download.csdn.net/detail/caoshangpa/9464700
相关文章推荐
- Qt 错误总结
- Qt5.0解析JSON
- QML中的state 状态
- QT连接多种数据库f方法及测试
- Qt for Windows:Qt 5.6.0 MinGW 静态编译版本制作
- QT中的QPainter类
- vs2013+Qt5.5.1+opencv2.4.11配置
- Qt使用教程之指定编辑器设置
- Kithara RTS进程与Qt应用程序间通信(共享内存)
- mac qt 注意事项
- [Qt]Problem:the Qt platform plugin "windows"
- QT的Paint 系统
- Qt Model View 框架
- QT---Winsocket获取网关(Gateway) 主机IP等信息
- qt Qcompleter自动补全类
- [NSIS]NSIS——Qt程序发布工具
- Qt5之坐标系统
- QT学习之路————QT窗体去掉标题栏后不能移动的问题
- MQTT协议详解二
- MQTT协议详解一