qt 串口通信 函数
时间: 2025-06-21 15:28:04 浏览: 9
### Qt串口通信函数使用教程与示例代码
在Qt框架中,`QSerialPort` 和 `QSerialPortInfo` 是实现串口通信的核心类[^1]。以下将详细介绍如何使用这些类来完成串口通信的基本功能,包括打开和关闭串口、配置串口参数以及发送和接收数据。
#### 1. 添加必要的头文件
在进行串口通信开发时,需要包含以下头文件:
```cpp
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDebug>
```
上述头文件提供了串口操作的基本功能以及调试工具[^3]。
#### 2. 配置串口参数
通过 `QSerialPort` 类可以配置串口的波特率、数据位、校验位、停止位等参数。以下是一个配置串口参数的示例:
```cpp
QSerialPort serialPort;
serialPort.setPortName("COM3"); // 设置串口号
serialPort.setBaudRate(QSerialPort::Baud9600); // 设置波特率为9600
serialPort.setDataBits(QSerialPort::Data8); // 设置数据位为8位
serialPort.setParity(QSerialPort::NoParity); // 设置无校验
serialPort.setStopBits(QSerialPort::OneStop); // 设置停止位为1位
serialPort.setFlowControl(QSerialPort::NoFlowControl); // 设置无流控
if (!serialPort.open(QIODevice::ReadWrite)) {
qDebug() << "Failed to open serial port:" << serialPort.errorString();
} else {
qDebug() << "Serial port opened successfully.";
}
```
此代码片段展示了如何配置并打开一个串口[^3]。
#### 3. 发送数据
可以通过 `write()` 方法向串口发送数据。例如:
```cpp
QString data = "Hello, Serial Port!";
serialPort.write(data.toUtf8()); // 将字符串转换为字节流并发送
serialPort.waitForBytesWritten(100); // 等待数据写入完成
qDebug() << "Data sent successfully.";
```
#### 4. 接收数据
可以通过信号槽机制捕获从串口接收到的数据。例如:
```cpp
connect(&serialPort, &QSerialPort::readyRead, [&]() {
QByteArray receivedData = serialPort.readAll(); // 读取所有可用数据
qDebug() << "Received data:" << receivedData;
});
```
当串口有新数据到达时,`readyRead` 信号会被触发,从而执行相应的槽函数[^2]。
#### 5. 关闭串口
在完成通信后,应确保正确关闭串口以释放资源:
```cpp
serialPort.close();
qDebug() << "Serial port closed.";
```
#### 示例代码总结
以下是一个完整的串口通信示例代码:
```cpp
#include <QCoreApplication>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
QSerialPort serialPort;
serialPort.setPortName("COM3");
serialPort.setBaudRate(QSerialPort::Baud9600);
serialPort.setDataBits(QSerialPort::Data8);
serialPort.setParity(QSerialPort::NoParity);
serialPort.setStopBits(QSerialPort::OneStop);
serialPort.setFlowControl(QSerialPort::NoFlowControl);
if (!serialPort.open(QIODevice::ReadWrite)) {
qDebug() << "Failed to open serial port:" << serialPort.errorString();
return -1;
}
QString data = "Hello, Serial Port!";
serialPort.write(data.toUtf8());
serialPort.waitForBytesWritten(100);
connect(&serialPort, &QSerialPort::readyRead, [&]() {
QByteArray receivedData = serialPort.readAll();
qDebug() << "Received data:" << receivedData;
});
QTimer::singleShot(2000, [&]() {
serialPort.close();
qDebug() << "Serial port closed.";
app.quit();
});
return app.exec();
}
```
此代码实现了串口的打开、配置、数据发送与接收以及关闭操作[^4]。
阅读全文
相关推荐
















