ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【QT】关于QSerialPort的错误处理 (Error Handling)及错误类型

2026/8/13 3:19:35 拓冰建站 浏览量
【QT】关于QSerialPort的错误处理 (Error Handling)及错误类型

QSerialPort 是 Qt 框架中用于串口通信的类,它提供了与串行端口进行数据读写和配置的功能。这个类封装了底层操作系统对串口的处理,使得开发者可以方便地在跨平台应用中实现串口通信。

回顾:

写数据 (Writing Data)

要向串口写数据,首先需要打开串口并配置相关参数(如波特率、数据位、校验位等)。写数据通常使用 write() 方法。例如:

QSerialPort serial;
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)) {serial.write("Your data here");
}

读数据 (Reading Data)

读取数据通常在 readyRead() 信号触发时进行。你可以连接此信号到一个槽函数,每当有新数据到达时,槽函数就会被调用。在槽函数中,你可以使用 read()readAll() 方法来获取数据。

QObject::connect(&serial, &QSerialPort::readyRead, [&]() {QByteArray data = serial.readAll();// 处理数据
});

本节重点

错误处理 (Error Handling)

QSerialPort 提供了 errorOccurred() 信号来报告错误。这个信号在出现错误时被触发,并提供一个 QSerialPort::SerialPortError 枚举值,表示发生的错误类型。

错误类型包括:

  • QSerialPort::NoError:没有错误。
  • QSerialPort::DeviceNotFoundError:找不到设备。
  • QSerialPort::PermissionError:没有足够的权限。
  • QSerialPort::OpenError:打开设备时出错。
  • QSerialPort::ParityError:奇偶校验错误。
  • QSerialPort::FramingError:帧错误。
  • QSerialPort::BreakConditionError:断线条件错误。
  • QSerialPort::WriteError:写数据时出错。
  • QSerialPort::ReadError:读数据时出错。
  • QSerialPort::ResourceError:设备被意外移除或系统资源不足。
  • QSerialPort::UnsupportedOperationError:不支持的操作。
  • QSerialPort::UnknownError:未知错误。
  • QSerialPort::TimeoutError:操作超时。
  • QSerialPort::NotOpenError:尝试操作一个未打开的设备。

可以连接 errorOccurred() 信号到一个槽函数来处理错误:

QObject::connect(&serial, &QSerialPort::errorOccurred, [&](QSerialPort::SerialPortError error) {if (error == QSerialPort::ResourceError) {qDebug() << "串口错误:" << serial.errorString();serial.close();}
});
  QString  ERRORString ;
switch (error) {case QSerialPort::NoError:ERRORString=  "No Error";break;case QSerialPort::DeviceNotFoundError:ERRORString= "Device Not Found";break;case QSerialPort::PermissionError:ERRORString= "Permission Denied";break;case QSerialPort::OpenError:ERRORString= "Open Error";break;case QSerialPort::ParityError:ERRORString= "Parity Error";break;case QSerialPort::FramingError:ERRORString= "Framing Error";break;case QSerialPort::BreakConditionError:ERRORString= "Break Condition";break;case QSerialPort::WriteError:ERRORString= "Write Error";break;case QSerialPort::ReadError:ERRORString= "Read Error";break;case QSerialPort::ResourceError:ERRORString= "Resource Error";break;case QSerialPort::UnsupportedOperationError:ERRORString= "Unsupported Operation";break;case QSerialPort::UnknownError:ERRORString= "Unknown Error";break;case QSerialPort::TimeoutError:ERRORString= "Timeout Error";break;case QSerialPort::NotOpenError:ERRORString= "Not Open Error";break;default:ERRORString= "Other Error";}qDebug()<<"SerialPortWorker::errorOccurred  ,info is  "<<ERRORString;

错误处理是串口通信中非常重要的部分,它可以帮助诊断和解决通信问题,确保应用程序的稳定性和可靠性。