1、在工程的pro文件中加入串口模块
QT += serialport
2、添加头文件
#include <QSerialPort>
#include <QSerialPortInfo>
3、连接串口接收数据信号到自己的槽函数
在窗口的.h
文件中添加槽函数声明:
private slots:
void serialPort_readyRead();
在窗口的构造函数中,将串口读取信号和自己的槽连接:
QObject::connect(&serial, &QSerialPort::readyRead, this, &MainWindow::serialPort_readyRead);
4、串口初始化函数
这里假设只有一个串口,打开这个串口。
QSerialPort serial; //声明一个串口变量
QString PortName = "";
if(serial.isOpen())
serial.close();
/* 遍历所有的串口 */
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
PortName = info.portName();
}
if(PortName == "")
{
QMessageBox::about(NULL, "提示", "搜索不到串口!");
return;
}
serial.setPortName(PortName); //COM口名字
serial.setBaudRate(QSerialPort::Baud115200); //设置波特率
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;
}
5、串口消息接收与粘包处理
假设串口发送的每条消息用|
分割开,则串口接收和处理粘包函数如下:
QString next;
void MainWindow::serialPort_readyRead()
{
QByteArray buffer = serial.readAll();
QString s = QString(buffer);
QStringList list = s.split("|");
list[0] = next + list[0];
next = list[list.size()-1];
for(int i=0;i<list.size()-1;i++)
{
//list[i]即为内容
}
}