简介
Qt中使用 QSerialPort 和 QSerialPortInfo 来实现串口通信相关功能;
界面设计
代码实现
首先需要在项目.pro文件中添加串口配置:
QT += serialport
使用 QSerialPortInfo 查询电脑中所有可用串口
//查找所有可用串口
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
ui->tb_PName->addItem(info.portName());//添加到界面可选
}
设置串口参数:
m_curPort->setPortName(ui->tb_PName->currentText());//串口名
m_curPort->setBaudRate(ui->tb_PRate->currentText().toInt());//波特率
m_curPort->setDataBits((QSerialPort::DataBits)ui->tb_PBit->currentText().toInt());//数据位
switch(ui->tb_PParity->currentIndex())//奇偶校验
{
case 0: m_curPort->setParity(QSerialPort::NoParity); break;
case 1: m_curPort->setParity(QSerialPort::EvenParity); break;
case 2: m_curPort->setParity(QSerialPort::OddParity); break;
default: break;
}
switch(ui->tb_PStop->currentIndex())//停止位
{
case 0: m_curPort->setStopBits(QSerialPort::OneStop); break;
case 1: m_curPort->setStopBits(QSerialPort::OneAndHalfStop); break;
case 2: m_curPort->setStopBits(QSerialPort::TwoStop); break;
default: break;
}
m_curPort->setFlowControl(QSerialPort::NoFlowControl);//流控制
读取串口接收到的数据:
//从接收缓冲区中读取数据
QByteArray buffer = m_curPort->readAll();
//从界面中读取以前收到的数据
QString recv = QDateTime::currentDateTime().toString("HH:mm:ss.mmm")+": ";
recv+=QString(buffer);
//显示信息
ui->tb_Receive->append(recv);
向串口中写入数据:
//获取界面上的数据并转换成utf8格式的字节流
QByteArray data = ui->tb_Send->toPlainText().toUtf8();
m_curPort->write(data);
运行效果
项目源码
Github:lizhifun / QtSerialDemo
开发环境
Author:Lizhifun
OS:Windows 10 家庭中文版
Compiler:Microsoft Visual C++ Compiler 15.9.28307.1259(amd64)
Kit:Desktop Qt 5.14.2 MSVC2017 64bit
Qt Creator:4.11.1