Qt串口通信全攻略:从配置到实战
串口通信基础
串口(Serial Port)是一种硬件接口,用于设备间的异步串行通信。在工业控制、嵌入式设备中广泛应用。Qt提供了QSerialPort类,支持跨平台串口操作,需包含头文件<QSerialPort>和<QSerialPortInfo>。
环境配置
- Qt项目配置
在pro文件中添加串口模块依赖:QT += serialport - 检查可用串口
通过QSerialPortInfo获取系统串口列表:foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { qDebug() << "Port:" << info.portName(); qDebug() << "Description:" << info.description(); }
串口参数设置
关键参数包括波特率、数据位、停止位、校验位。示例配置:
QSerialPort serial;
serial.setPortName("COM1"); // Windows示例,Linux通常为"/dev/ttyS0"
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)) {
qDebug() << "Failed to open port:" << serial.errorString();
}
数据读写操作
- 写入数据
使用write()发送数据,需确保端口已打开:QByteArray sendData = "Hello Serial"; qint64 bytesWritten = serial.write(sendData); if (bytesWritten == -1) { qDebug() << "Write error:" << serial.errorString(); } - 读取数据
通过readyRead信号触发读取:QObject::connect(&serial, &QSerialPort::readyRead, [&]() { QByteArray data = serial.readAll(); qDebug() << "Received:" << data; });
错误处理与调试
- 错误信号:监听
errorOccurred信号捕获异常:QObject::connect(&serial, &QSerialPort::errorOccurred, [&](QSerialPort::SerialPortError error) { if (error != QSerialPort::NoError) { qDebug() << "Error:" << serial.errorString(); } }); - 超时设置:通过
setRequestToSend和setDataTerminalReady控制硬件流超时。
示例:完整收发流程
QSerialPort serial;
// 配置参数(略)
if (serial.open(QIODevice::ReadWrite)) {
serial.write("Test Message");
while (serial.waitForReadyRead(1000)) { // 等待1秒
QByteArray response = serial.readAll();
while (serial.waitForReadyRead(10))
response += serial.readAll();
qDebug() << "Response:" << response;
}
} else {
qDebug() << "Open failed:" << serial.errorString();
}
serial.close();
注意事项
- 跨平台差异:Windows使用
COMx,Linux/macOS使用/dev/ttyX。 - 权限问题:Linux需确保用户有串口设备访问权限(如加入
dialout组)。 - 资源释放:程序退出前调用
close()释放端口。
通过以上步骤可实现Qt下的串口通信功能,适用于数据采集、设备调试等场景。
BbS.okapop061.sbs/PoSt/1122_742749.HtM
BbS.okapop062.sbs/PoSt/1122_886669.HtM
BbS.okapop063.sbs/PoSt/1122_418123.HtM
BbS.okapop065.sbs/PoSt/1122_766792.HtM
BbS.okapop066.sbs/PoSt/1122_395914.HtM
BbS.okapop067.sbs/PoSt/1122_871227.HtM
BbS.okapop068.sbs/PoSt/1122_069647.HtM
BbS.okapop069.sbs/PoSt/1122_668213.HtM
BbS.okapop070.sbs/PoSt/1122_890945.HtM
BbS.okapop071.sbs/PoSt/1122_563866.HtM
BbS.okapop061.sbs/PoSt/1122_603399.HtM
BbS.okapop062.sbs/PoSt/1122_068599.HtM
BbS.okapop063.sbs/PoSt/1122_671186.HtM
BbS.okapop065.sbs/PoSt/1122_716947.HtM
BbS.okapop066.sbs/PoSt/1122_521466.HtM
BbS.okapop067.sbs/PoSt/1122_870852.HtM
BbS.okapop068.sbs/PoSt/1122_402396.HtM
BbS.okapop069.sbs/PoSt/1122_798518.HtM
BbS.okapop070.sbs/PoSt/1122_542569.HtM
BbS.okapop071.sbs/PoSt/1122_034176.HtM
BbS.okapop061.sbs/PoSt/1122_403293.HtM
BbS.okapop062.sbs/PoSt/1122_980476.HtM
BbS.okapop063.sbs/PoSt/1122_269775.HtM
BbS.okapop065.sbs/PoSt/1122_796978.HtM
BbS.okapop066.sbs/PoSt/1122_646513.HtM
BbS.okapop067.sbs/PoSt/1122_678575.HtM
BbS.okapop068.sbs/PoSt/1122_602336.HtM
BbS.okapop069.sbs/PoSt/1122_474149.HtM
BbS.okapop070.sbs/PoSt/1122_162979.HtM
BbS.okapop071.sbs/PoSt/1122_356331.HtM
BbS.okapop061.sbs/PoSt/1122_228616.HtM
BbS.okapop062.sbs/PoSt/1122_989407.HtM
BbS.okapop063.sbs/PoSt/1122_306647.HtM
BbS.okapop065.sbs/PoSt/1122_161334.HtM
BbS.okapop066.sbs/PoSt/1122_615461.HtM
BbS.okapop067.sbs/PoSt/1122_834167.HtM
BbS.okapop068.sbs/PoSt/1122_796431.HtM
BbS.okapop069.sbs/PoSt/1122_537119.HtM
BbS.okapop070.sbs/PoSt/1122_505757.HtM
BbS.okapop071.sbs/PoSt/1122_834634.HtM
BbS.okapop061.sbs/PoSt/1122_773549.HtM
BbS.okapop062.sbs/PoSt/1122_790353.HtM
BbS.okapop063.sbs/PoSt/1122_605331.HtM
BbS.okapop065.sbs/PoSt/1122_520128.HtM
BbS.okapop066.sbs/PoSt/1122_779151.HtM
BbS.okapop067.sbs/PoSt/1122_610399.HtM
BbS.okapop068.sbs/PoSt/1122_253806.HtM
BbS.okapop069.sbs/PoSt/1122_814335.HtM
BbS.okapop070.sbs/PoSt/1122_923336.HtM
BbS.okapop071.sbs/PoSt/1122_226244.HtM
BbS.okapop061.sbs/PoSt/1122_138974.HtM
BbS.okapop062.sbs/PoSt/1122_494438.HtM
BbS.okapop063.sbs/PoSt/1122_217266.HtM
BbS.okapop065.sbs/PoSt/1122_134688.HtM
BbS.okapop066.sbs/PoSt/1122_847863.HtM
BbS.okapop067.sbs/PoSt/1122_731680.HtM
BbS.okapop068.sbs/PoSt/1122_825525.HtM
BbS.okapop069.sbs/PoSt/1122_273843.HtM
BbS.okapop070.sbs/PoSt/1122_603991.HtM
BbS.okapop071.sbs/PoSt/1122_707799.HtM
BbS.okapop072.sbs/PoSt/1122_232133.HtM
BbS.okapop073.sbs/PoSt/1122_384216.HtM
BbS.okapop074.sbs/PoSt/1122_212348.HtM
BbS.okapop075.sbs/PoSt/1122_976231.HtM
BbS.okapop076.sbs/PoSt/1122_200934.HtM
BbS.okapop077.sbs/PoSt/1122_286295.HtM
BbS.okapop078.sbs/PoSt/1122_585910.HtM
BbS.okapop079.sbs/PoSt/1122_307904.HtM
BbS.okapop080.sbs/PoSt/1122_064128.HtM
BbS.okapop081.sbs/PoSt/1122_011412.HtM
BbS.okapop072.sbs/PoSt/1122_549325.HtM
BbS.okapop073.sbs/PoSt/1122_642692.HtM
BbS.okapop074.sbs/PoSt/1122_739108.HtM
BbS.okapop075.sbs/PoSt/1122_978280.HtM
BbS.okapop076.sbs/PoSt/1122_308298.HtM
BbS.okapop077.sbs/PoSt/1122_686611.HtM
BbS.okapop078.sbs/PoSt/1122_723097.HtM
BbS.okapop079.sbs/PoSt/1122_559459.HtM
BbS.okapop080.sbs/PoSt/1122_981033.HtM
BbS.okapop081.sbs/PoSt/1122_246152.HtM


