配置工程文件
Qt中的串口使用QSerialPort,QSerialPortInfo两个类,而这两个类的使用必须在工程文件中加入 serialport模块,也就是串口模块。
QT += serialport
包含头文件
两个类的作用
QSerialPort类:提供访问串口的功能。使用串口必需实例化一个QSerialPort类,通过实例化的对象,配置参数。
QSerialPortInfo类:提供现有串口信息,使用这个类可以搜寻计算机可用串口的信息,从而选择你所需要的串口。
代码如下
#include<QSerialPortInfo>
#include<QSerialPort>
头文件
在头文件中加入以下代码
QSerialPortInfo *SerialPortInfo=NULL;
QSerialPort SerialPort;
代码块
包含头文件
#include <QList>
#include<QDebug>
获取可用串口信息,这里输出的是串口名称
QList<QSerialPortInfo> list3;//获取串口列表
list3=QSerialPortInfo::availablePorts();
for(int i=0;i<list3.size();i++)
qDebug()<<list3[i].portName();//打印串口信息
选择串口,此处位选择名称为COM10的串口,并输出该串口的具体信息
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())//搜索串口,获取串口列表
{
if(info.portName()==
"COM10"){//在串口列表中查找
//此处使用的是判断串口描述说明相同
SerialPortInfo= info;//储存串口信息
SerialPort.setPort(info);//设置串口
break;//找到所需要的串口信息,退出循环
}//使用if语句判断是否所需串口
}
if(SerialPortInfo.portName()
=="COM10"){
qDebug() << "所需串口已找到,具体信息如下:";
qDebug() << "Name : " << SerialPortInfo.portName();//串口名称,比如com3
qDebug() << "Description : " << SerialPortInfo.description();//串口描述说明
qDebug() << "Manufacturer: " << SerialPortInfo.manufacturer();
qDebug() << "Serial Number: " << SerialPortInfo.serialNumber();//串口号
qDebug() << "System Location: " << SerialPortInfo.systemLocation();//系统位置
}else{
qDebug() << "串口信息未找到,请检查设备是否连接";
}
串口设置
设置波特率
SerialPort.setBaudRate(QSerialPort::Baud115200);//设置串口波特率(9600)
SerialPort.setDataBits(QSerialPort::Data8);//设置数据位(8)
SerialPort.setParity(QSerialPort::NoParity); //设置奇偶校检(无)
SerialPort.setStopBits(QSerialPort::OneStop);//设置停止位(一位)
SerialPort.setFlowControl(QSerialPort::NoFlowControl);//设置流控制(无)
打开串口,设置打开模式
ReadOnly,表示只读,这个模式下,只能从串口读取数据,而不能写数据
SerialPort.open(QIODevice::ReadOnly);//打开串口,并设置串口为只读模式
判断串口是否打开,调用isOpen()函数
if(SerialPort.isOpen())
qDebug()<<"串口已经打开";
读取数据
当串口中有数据进来时,会触发readyRead信号。此时调用读取数据的函数。
connect(&Leida_com,&QSerialPort::readyRead,[=](){
ShuJu_Read();//读取数据的函数
});
接收到的数据为字节类型,QSerialPort.read(7);中的7代表一次性接收7位数据
void EditTing::ShuJu_Read(){//读取数据
QByteArray Read_Buf=QSerialPort.read(7);
}
对数据类型进行转换便可。