Qt串口通信-qextserialport

本文分享了使用Qt5SerialPort进行串口通信时遇到的内存泄漏问题及解决方案,通过对比发现qextserialport不仅避免了内存泄漏,还支持跨线程操作,文中详细介绍了qextserialport的配置与使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实一开始使用的是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();//数据转十六进制

有兴趣的人欢迎评论交流。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值