看了很多qt串口读取的处理
有直接收到就直接处理或转发处理的
有一长串做法 void do_DataHandler(QByteArray BufferData);//解析数据
还有各种自定义包头包尾的做法
下面是个人做法,包头'\2'
,包尾'\3'
有个 std::vector<char>
缓存区m_buffer
完整包再通过connect绑定处理函数
转发处理
以下是代码:
char rOneByte,rStep;
void serial_port::readData()
{
QByteArray tempData = serialPort.readAll();
if(tempData.isEmpty())return;
int i=tempData.size();
//读取数据大都是断续的,需要处理
for(int j=0;j<i;j++){
rOneByte = tempData.at(j);
m_buffer[rIndex] = rOneByte;
if (rOneByte == '\2') {
rIndex = 0;
rStep = 1;
}
if (rStep == 1) {
rIndex++;
if (rOneByte == '\3') {
emit signalDataReadly(m_buffer.data());
rIndex = 0;
rStep = 0;
}
}
}
}