QT编写的读取串口数据的总结(2021-05-06)

本文总结了使用QT进行串口通信的步骤,包括在.pro文件中添加依赖,引入相关头文件,定义私有成员对象,搜索串口名,配置并打开串口,根据协议写入指令以及实现读取数据的算法。

QT串口通信的总结

本文为作者从实际项目中脱离出来对串口配置、读取数据的总结,仅供参考。
若有发现问题,欢迎留言补充。
转载请注明出处。

1. 在项目的.pro文件中添加依赖:

QT += serialport

2. 在mainwindow.h中引入相关头文件

#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>

3. 在mainwindow.h中,定义私有成员对象、变量

	QSerialPort serial;         //创建串口类对象

	QString PortName;			//存储串口名的变量
	QString temp;              //缓冲区

4.实现步骤

1)foreach函数搜索串口名

	foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())//读取串口信息
	 {
	        PortName=info.portName();
	        //也可以将串口名放在ui的Combo Box中
	}

2)串口配置,打开串口

		//设置串口名字(设置为搜索函数中搜索到的串口名字)
        serial.setPortName(PortName);    

        //设置波特率
        //获取ui界面中写入的的当前文本信息,并将来QString格式转化为int类型
        serial.setBaudRate(ui->cmb_BaudRate->currentText().toInt());   

        //设置数据位数
        serial.setDataBits(QSerialPort::Data8);

        //设置校验方式
        //在帮助文件中查找选择自己需要的校验方式
        serial.setParity(QSerialPort::NoParity);

        //设置停止位
        serial.setStopBits(QSerialPort::OneStop);

        //设置流控制
        serial.setFlowControl(QSerialPort::NoFlowControl);

        //打开串口
        if(!serial.open(QIODevice::ReadWrite))
        {
            QMessageBox::about(NULL, "提示", "无法打开串口!");
            return;
        }
        else
        {
            QMessageBox::about(NULL, "提示", "成功打开串口!");
        }

3)依据协议 写入指令

	QString str("  ");
	serial.write(str.toUtf8().data());  ////将str类型转换为QByteArray类型 并且写入指令

4)读取数据算法

    QByteArray data = serial.readAll();     //读取串口返回指令
    temp.append(data);  //将读取的数据放入缓冲区

	QString a1;     //局部变量
    a1.append(temp.mid(0,xxx);		//mid()函数是提取temp中0-xxx的文本  
    //提取返回指令的关键字,用以判断返回指令类型

    QStringList stringlist;     //新建字符串列表 配合分支结构使用
    stringlist<<"xxxx"<<"xxxx"<<"xxxx"		//写入一组标识符号
	if(temp.contains("\r\n"))   //只有读到换行符 才是一条完整的指令  才能进入到循环中
    {
        switch(stringlist.indexOf(a1))
        //判断从temp缓冲区中提取的是哪一个标识符,依据字符串列表中的索引值进入不同分支
        {
        	case 0:    
            break;

       		case 1:  
            break;

	        case 2:    
            break;
            
            case 3:
            break;
            
      		case 4:
			break;
    }
    }

	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值