其实一开始使用的是Qt5SerialPort(Qt5SerialPort.lib)串口通信,但是在使用后,测试过程中发现内存一直在增长,经过定位后发现是串口通信中存在一个大bug,其serialIo.waitForReadyRead(time)会阻断进程,造成内存累计增加,但是不加又没有返回数据,比较有意思的是,我在网上下载串口助手,连续发送时,也发现内存在增加,查找一些资料以及实验后,最后发现qextserialport很好用,而且没有出现内存泄漏。除此之外,qextserialport支持跨线程定义的,这一点Qt5SerialPort却不支持。下边记录一下详细实现过程:
【1】首先在网上查找qextserialport-1.2win-alpha下载,然后将六个文件添加到你的工程中即可,分别是qextserialbase.h,qextserialport.h,win_qextserialport.h,以及对应的qextserialbase.cpp,qextserialport.cpp,win_qextserialport.cpp
【2】详细代码
#include "win_qextserialport.h"
Win_QextSerialPort serial;
serial.setPortName("COM5");
if (!serial.open(QIODevice::ReadWrite))
{
return;
}
serial.setBaudRate(BAUD115200);
serial.setDataBits(DATA_8);
serial.setParity(PAR_NONE);
serial.setFlowControl(FLOW_OFF);
serial.setStopBits(STOP_1);
QByteArray byteArray;
QString sendstr = "DE 01 05 59 83";
QByteArray writeData;
writeData = QByteArray::fromHex(sendstr.toLatin1());//转十六进制
serial.setTimeout(30);
serial.write(writeData);
char data[50];
serial.read(data, 50);//读取串口数据
QByteArray ba((char*)data, 50);
byteArray = ba.toHex();//数据转十六进制
有兴趣的人欢迎评论交流。