Qt 串口通信(QSerialPort)16进制收发实例代码(QT实战5)

Felicite ·
更新时间:2024-09-21
· 769 次阅读

Qt 串口通信(QSerialPort)16进制收发实例代码

     首先在项目文件里面添加一句  

   QT       += serialport

 

使用静态函数生成QSerialPortInfo对象列表。列表中的每个QSerialPortInfo对象表示一个串行端口,可以查询端口名称、系统位置、描述和制造商。QSerialPortInfo类还可以用作QSerialPort类的setPort()方法的输入参数。     m_ui->serialPortInfoListBox->clear();     QString description;     QString manufacturer;     QString serialNumber;     const auto infos = QSerialPortInfo::availablePorts();     for (const QSerialPortInfo &info : infos) {         QStringList list;         description = info.description();         manufacturer = info.manufacturer();         serialNumber = info.serialNumber();         list << info.portName()              << (!description.isEmpty() ? description : blankString)              << (!manufacturer.isEmpty() ? manufacturer : blankString)              << (!serialNumber.isEmpty() ? serialNumber : blankString)              << info.systemLocation()              << (info.vendorIdentifier() ? QString::number(info.vendorIdentifier(), 16) : blankString)              <serialPortInfoListBox->addItem(list.first(), list);     }     m_ui->serialPortInfoListBox->addItem(tr("Custom"));

 

 2、打开串口

        connect(m_serial, &QSerialPort::errorOccurred, this, &MainWindow::handleError);

         //连接信号槽 当下位机发送数据QSerialPortInfo 会发送个 readyRead 信号,我们定义个//槽void readData ()解析数据

        connect(m_serial, &QSerialPort::readyRead, this, &MainWindow::readData);     

  const SettingsDialog::Settings p = m_settings->settings();     m_serial->setPortName(p.name);     m_serial->setBaudRate(p.baudRate);     m_serial->setDataBits(p.dataBits);     m_serial->setParity(p.parity);     m_serial->setStopBits(p.stopBits);     m_serial->setFlowControl(p.flowControl);     if (m_serial->open(QIODevice::ReadWrite)) {         showStatusMessage(tr("Connected to %1 : %2, %3, %4, %5, %6")                           .arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits)                           .arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl));     } else {         QMessageBox::critical(this, tr("Error"), m_serial->errorString());         showStatusMessage(tr("Open error"));     }

 

  

  3、发送数据,转换输入,并16进制发送

   

QString info= ui->textEditsend->toPlainText();     if (info.contains(" "))     {         info.replace(QString(" "),QString(""));//把空格去掉    }     qDebug()<<"Write to serial: "<write(sendBuf);

 

4、接收数据并16进制显示

  

void MainWindow::readData() { const QByteArray info = m_serial->readAll(); QByteArray hexData = info.toHex(); QString string; string.prepend(hexData);// QByteArray转QString方法2 qDebug()<<"receive info:"<textEditrec->append(string); }
5、实际界面显示

 

备注:实战示例,解疑答惑。

           --不间端地思考,实时地批判你的工作!


作者:ydyuse



串口 16进制 串口通信 进制 通信

需要 登录 后方可回复, 如果你还没有账号请 注册新账号