赞
踩
工作中遇到使用Qt在Linux下读取串口信息功能。串口设备是二维码扫码枪。
问题:QSerialPort
的readyRead()
信号,只要有数据就抛出,这就导致一条数据分多次抛出。由于正常的数据没有固定的开头和结尾,这就导致无法获取正常的一组数据
解决思路:增加接收延时功能,把多次读取的数据保存到缓冲区,延时结束,一次性读取数据
由于QSerialPort
没有提供串口接收延时功能,需自己添加
QSerialPort *com = new QSerialPort();
QTimer *timer = new QTimer();
connect(com, SIGNAL(readyRead()), this, SLOT(com_rece()));
connect(timer, SIGNAL(timeout()), this, SLOT(timeUpdate())));
void MainWindow::com_rece()
{
timer->start(100);//启动定时器,接收100毫秒数据(根据情况设定)
buf.append(com->readAll());
}
void MainWindow::timeUpdate()
{
timer->stop();
if(buf.length()!=0)
{
qDebug()<<buf;
}
buf.clear();
}
本示例源码只为展示原理,省去了串口设置相关代码,请注意
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。