头文件增加
#include <QSerialPort>
pro文件增加
QT += serialport
成员变量
QSerialPort serial
接收槽函数
private slots: void serial_port_ready_read()
初始化
//连接信号和槽,每次串口接收到数据调用槽函数
QObject::connect(&serial, &QSerialPort::readyRead, this, &MainWindow::serial_port_ready_read);
//设置串口名
serial.setPortName("COM1");
//设置波特率
serial.setBaudRate(QSerialPort::Baud9600);
//设置数据位数
serial.setDataBits(QSerialPort::Data8);
//设置奇偶校验
serial.setParity(QSerialPort::NoParity);
//设置停止位
serial.setStopBits(QSerialPort::OneStop);
//设置流控制
serial.setFlowControl(QSerialPort::NoFlowControl);
//打开串口
if(!serial.open(QIODevice::ReadWrite)) {
QMessageBox::about(NULL, QStringLiteral("提示"), QStringLiteral("无法打开串口!"));
QObject::disconnect(&serial, 0, 0, 0);
}
接收槽函数
void MainWindow::serial_port_ready_read()
{
//从接收缓冲区中读取数据
QByteArray buffer = serial.readAll();
if(buffer.length()) {
// ……
}
}
发送函数
void MainWindow::serial_port_send(char *txBuf, quint16 txLen)
{
QByteArray Data = QByteArray((const char *)txBuf, txLen);
serial.flush();
serial.write(Data);
serial.waitForBytesWritten(5000);
}
关闭
if(serial.isOpen())
{
serial.close();
QObject::disconnect(&serial, 0, 0, 0);
}
罗列可用串口
假设界面上有控件
ui->comboBox->clear();
//通过QSerialPortInfo查找可用串口
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
ui->comboBox->addItem(info.portName());
}