
要求实现如下功能获取串口号foreach (const QSerialPortInfo serialPortInfo, QSerialPortInfo::availablePorts()) { qDebug() Port: serialPortInfo.portName(); // e.g. COM1 qDebug() Description: serialPortInfo.description(); // e.g. USB Serial Port qDebug() Manufacturer: serialPortInfo.manufacturer(); // e.g. FTDI // add combox box items ui-comboBox-addItem(serialPortInfo.portName()); }设置串口属性void MainWindow::setSerialPort(QString portName, qint32 baudRate, QSerialPort::DataBits dataBits, QSerialPort::Parity parity, QSerialPort::StopBits stopBits, QSerialPort::FlowControl flowControl) { // set serial port parameters serial.setPortName(portName); serial.setBaudRate(baudRate); serial.setDataBits(dataBits); serial.setParity(parity); serial.setStopBits(stopBits); serial.setFlowControl(flowControl); }打开串口//open serial port if(serial.open(QIODevice::ReadWrite)){ qDebug() Serial port opened;} else{ // if not opened, show message box QMessageBox::critical(this, Error, serial.errorString()); }串口助手当中支持以hex方法发送数据具体解释如下在串口助手工具中发送模式中的Hex模式指的是以十六进制Hexadecimal形式发送数据。这种模式在处理串口通信时非常有用特别是当需要发送或接收非文本形式的二进制数据时。以下是Hex模式发送数据的几个关键点数据表示在Hex模式下发送的数据以十六进制数的形式展示例如0x33、0x4A等。这些十六进制数直接对应着二进制数据中的字节值。数据转换当用户在串口助手中输入十六进制数时工具会将这些数转换为对应的二进制数据并通过串口发送出去。同样接收到的二进制数据也会在Hex模式下以十六进制数的形式展示出来。应用场景Hex模式特别适用于需要精确控制发送或接收数据字节的场景比如嵌入式系统编程、硬件调试、网络通信协议测试等。在这些场景中二进制数据的每一位都可能有特定的含义因此使用Hex模式可以更方便地查看和修改这些数据。与文本模式的区别与Hex模式相对应的是文本模式Text Mode或ASCII Mode。在文本模式下发送的数据以ASCII码表中的字符形式展示如字母、数字、标点符号等。当需要发送或接收文本信息时文本模式更为直观和方便。然而在处理非文本形式的二进制数据时Hex模式则更具优势。使用注意事项在使用Hex模式发送数据时需要注意数据的完整性和正确性。由于十六进制数是以两位为一组表示的00-FF因此在输入数据时要确保每个数都是两位的不足两位时需要在前面补零。此外还需要注意串口通信的波特率、数据位、停止位等参数设置以确保数据的正确传输。综上所述串口助手工具中的Hex模式是一种用于以十六进制形式发送和接收二进制数据的模式它在处理串口通信中的非文本数据时非常有用。如果对这块感到陌生可以同时打开二个现成的串口助手测试一下传送格式与效果。文本模式的发送接收存在编码问题要求支持UTF-8 、GBK 二种格式编码。值得注意的是qt5、qt6 对编码的方法有变化。这里我采取兼容qt5方式处理该问题1 安装兼容模块2 pro文件中加一行说明greaterThan(QT_MAJOR_VERSION,5): QT core5compat3 使用QTextCodec 进行编码#include QTextCodec ......... QByteArray MainWindow::encode(QString data, QString encode) { // encode data QByteArray byteArray; if (encode gbk) { QTextCodec *codec QTextCodec::codecForName(gbk); byteArray codec-fromUnicode(data); } else if (encode utf-8) { QTextCodec *codec QTextCodec::codecForName(utf-8); byteArray codec-fromUnicode(data); } return byteArray; }4 向串口写数据的时候调用该方法//read data from plainTextEdit and encode data use gbk QByteArray byteArray encode(ui-plainTextEdit-toPlainText(), gbk); // write data to serial port com2 serial.write(byteArray);现在中文也能正确编码了