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

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

项目全部代码打包https://download.csdn.net/download/ydyuse/12324695    

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

   QT       += serialport

 

  1. 使用静态函数生成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)

             << (info.productIdentifier() ? QString::number(info.productIdentifier(), 16) : blankString);



        m_ui->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: "<<info;
    //转换成16进制发送

    QByteArray sendBuf = QByteArray::fromHex(info.toLatin1());

    m_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:"<<info;
    ui->textEditrec->append(string);
}
5、实际界面显示

 

 


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

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

  • 16
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Qt串口通信是一种可以在Qt平台上进行串口通信的解决方案。其中,Qt串口通信模块qserialport是实现串口通信的关键模块。本文将为大家介绍Qt串口通信模块qserialport的开发完整实例。 首先,我们需要在Qt中打开串口通信模块qserialport。在Qt 5.2及以上版本中,qserialport已经被包含在QtCore模块中。因此,我们只需要在代码中引入QtCore模块即可使用qserialport。 接下来,我们需要定义串口参数。我们可以利用QSerialPort类中提供的函数setBaudRate()、setDataBits()、setParity()等来设置参数。例如: ```cpp QSerialPort serial; serial.setBaudRate(QSerialPort::Baud9600); serial.setDataBits(QSerialPort::Data8); serial.setParity(QSerialPort::NoParity); serial.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); ``` 然后,我们需要打开串口。我们可以使用QSerialPort类的open()函数来打开串口。例如: ```cpp serial.setPortName("COM1"); // 设置串口号为COM1 if (serial.open(QIODevice::ReadWrite)) { qDebug() << "串口已打开"; } else { qDebug() << "串口打开失败"; } ``` 接下来,我们可以通过QSerialPort类的函数write()和read()来进行数据读写。例如: ```cpp // 向串口写入数据 char buf[] = "hello world"; serial.write(buf, sizeof(buf)); // 从串口读取数据 QByteArray data = serial.readAll(); qDebug() << data; ``` 最后,在程序结束时我们需要关闭串口。我们可以使用QSerialPort类的close()函数来关闭串口。例如: ```cpp serial.close(); ``` 综上所述,以上就是Qt串口通信模块qserialport的开发完整实例。在实际应用中,我们可以根据需要对以上代码进行修改,从而实现更加复杂的串口通信功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值