QT5.12串口数据读写

实测发现 my_serialPort->readAll();只能通过数组读一次。
void DelosSerialPort::readMyCom()//读取缓冲的数据,每秒读一次
{
    //这个判断尤为重要,否则的话直接延时再接收数据,空闲时和会出现高内存占用
    if (my_serialPort->bytesAvailable()<=0){return;}

    myHelper::Sleep(100);//延时100毫秒保证接收到的是一条完整的数据,而不是脱节的

    QByteArray requestData = my_serialPort->readAll();//用requestData存储从串口那读取的数据

    if(requestData.length())//如果读取到有数据,就显示出来。
    {
       //ui->textEdit_read->append(requestData); /*字符串显示*/
       if(ui->comboBox_protocol->currentText()=="ASCII")
       {
         /*将数组转换成字符串很重要 串口不能读两次*/
         QString strDisplay=QString::fromLocal8Bit(requestData);
         //ui->textEdit_read->append(strDisplay); /*字符串显示*/

         /*转换方法一*/
         /*
         int x= strDisplay.indexOf("X");
         int y= strDisplay.indexOf("Y");
         int z= strDisplay.indexOf("Z");
         int l= strDisplay.length();
         qDebug() << QString::number( x);
         qDebug() << QString::number( y);
         qDebug() << QString::number( z);
         qDebug() << QString::number( l);

          */

         /*转换方法二*/
         QStringList list = strDisplay.split("\n");

         if(strDisplay.mid(0,1)!="X")
         {
             QString strMess = "通讯协议不是ASCII";
             ui->label_SetMessage->setText(strMess);
             return;
         }

       }
       else if(ui->comboBox_protocol->currentText()=="HEX")
       {
           QString strDisplay=QString::fromLocal8Bit(requestData);
           /*打印16进制数据*/
           QString str="";
           QString hex=requestData.toHex();
           for (int i=0;i<hex.length();i=i+2)
           {
               str+=hex.mid(i,2)+" ";
           }

           //ui->textEdit_read->append(str);
            qDebug()<<str;

       }
    }
    requestData.clear();    //清除缓冲区
}
 
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Qt是一个跨平台的应用程序开发框架,支持多种编程语言,其包括C++。Qt提供了一种以事件驱动方式处理串口数据的方法,可以方便地读取和写入串口数据。 首先,在Qt使用串口需要添加SerialPort模块。在.pro文件添加如下代码: ``` QT += serialport ``` 接下来,在代码导入串口相关的头文件: ```cpp #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo> ``` 然后,创建一个QSerialPort对象,并进行初始化设置: ```cpp 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); // 设置流控制 ``` 打开串口并判断是否成功: ```cpp if (serial.open(QIODevice::ReadWrite)) { // 串口打开成功 } else { // 串口打开失败 } ``` 使用串口读取数据需要在适当的位置连接QSerialPort的readyRead()信号到一个槽函数,槽函数用于处理读取到的数据: ```cpp connect(&serial, &QSerialPort::readyRead, this, &MyClass::handleSerialData); ``` 数据读取槽函数的示例代码如下: ```cpp void MyClass::handleSerialData() { QByteArray data = serial.readAll(); // 处理读取到的数据 } ``` 最后,在适当的位置关闭串口: ```cpp serial.close(); ``` 以上就是使用Qt 5.12读取COM串口数据的简要示例,通过以上的步骤,可以方便地使用Qt读取和处理串口数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天纵鹏元

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值