有时候QT在串口读取的数据会不完整,或者一次的数据会分两次读取。
出现这种情况一般是串口读取数据太快了,让读取函数延时一段时间就可以有效的避免串口数据读取不完整的情况。
延时可以选择用定时器,但那种方式需要定义信号与槽,比较麻烦,这里直接调用QTime来进行延时。
//头文件引用
#include <QTime>
//读取函数的信号与槽连接
connect(serial,SIGNAL(readyRead()),this,SLOT(ReadData()));
//读取函数
void MainWindow::socket_Read_Data()
{
QTime time;
time.start();
while(time.elapsed() < 1000) //等待时间流逝1000ms
QCoreApplication::processEvents(); //处理事件
QByteArray buffer;
QString str;
//读取缓冲区数据
buffer = socket->readAll();
if(!buffer.isEmpty())
{
str+=tr(buffer);
}buffer.clear();//清空传递所用的字符串,避免下次数据错误
}
//处理成一个函数
void MainWindow::delayms(int num)
{
QTime time;
time.start();
while(time.elapsed() < num) //等待时间流逝num ms
QCoreApplication::processEvents(); //处理事件
}