.pro文件添加:QT += serialport
//添加头文件
#include <QSerialPort>
#include <QSerialPortInfo>
//头文件声明类成员变量
QSerialPort m_pSerialPort;
QComboBox* m_pComboBox;
QTextEdit* m_pTextEdit;
QLineEdit* m_pLineInput;
//构造函数文件
QSerialPort m_pSerialPort = new QSerialPort();
m_pTextEdit = new QTextEidt();
m_pComboBox = new QComboBox();
m_pLineInput = new QLineEdit();
//接收信息信号与槽的连接
connect(m_pSerialPort, &QSerialPort::readyRead, this, &Widget::onRecvInfo);
//发生错误时信号与槽的连接
connect(m_pSerialPort, static_cast<void (QSerialPort::*)(QSerialPort::SerialPortError)>(&QSerialPort::error), this, &Widget::onHandleSerialError);
//初始化ComboBox(运行程序后自动获取设备的所有可用连接)
void initComboBox()
{
m_pComboBox->clear();
static QList<QSerialPortInfo> serialPortNameList = QSerialPortInfo::availablePorts();
for(int i = 0; i < serialPortNameList.count(); i++)
m_pComboBox->addItem("Com " + QString("%1:").arg(i, 2, 10, QChar('0')) + serialPortNameList.at(i).portName());
}
//打开串口函数
void openSerialPort()
{
if(m_pSerialPort->isOpen())
{
m_pSerialPort->clear();
m_pSerialPort->close();
}
m_pSerialPort->setPortName(m_pComboBox->currentText().split(":").at(1));
if(!m_pSerialPort->open(QIODevice::ReadWrite))
return ;
m_bInputBtn = true;
//设置波特率和读写方向
m_pSerialPort->setBaudRate(QSerialPort::Baud115200, QSerialPort::AllDirections);
//设置数据位
m_pSerialPort->setDataBits(QSerialPort::Data8);
//设置无流控制
m_pSerialPort->setFlowControl(QSerialPort::NoFlowControl);
//设置无校验位
m_pSerialPort->setParity(QSerialPort::NoParity);
//一位停止位
m_pSerialPort->setStopBits(QSerialPort::OneStop);
}
//接收信息槽函数
void Widget::onRecvInfo()
{
QByteArray info = m_pSerialPort->readAll();
m_pTextEdit->append(info);
m_pTextEdit->moveCursor(QTextCursor::End);
//转为16进制
//QByteArray hexData = info.toHex();
}
//错误处理槽函数
void Widget::onHandleSerialError(QSerialPort::SerialPortError error)
{
if (error == QSerialPort::ResourceError) {
QMessageBox::critical(this, tr("Error"), "串口连接中断,请检查是否正确连接!");
m_pSerialPort->close();
}
}
//发送信息到设备函数
void sendMsg()
{
QString str = m_pLineInput->text();
str = str + "\n";
QByteArray byteArry = str.toLatin1();
m_pSerialPort->write(byteArry);
m_pLineInput->clear();
}