嵌入式笔记:Qt串口读取数据及多组JSON格式截取的一种方法

1 篇文章 0 订阅
1 篇文章 0 订阅

处理串口接收多组JSON格式的数据时,可用此方法,当有串口读取信号时,设置定时器读取串口数。当时间完后对数据进行处理。
例:

#include <QTimer>

static int k=0,j=0;
static QTimer *timer = new QTimer();
QByteArray temp_buf;    //缓冲区,接收串口数据


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
   connect(&serial, &QSerialPort::readyRead, this, &MainWindow::serialPort_readyRead);
   connect(timer,SIGNAL(timeout()),this,SLOT(timeUpdate()));
  
   ui->setupUi(this);

}


MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::serialPort_readyRead()
{
    timer->start(100);//启动定时器,接收100毫秒数据(根据情况设定)
    temp_buf.append(serial.readAll());
}


void MainWindow::timeUpdate()
{
    timer->stop();
    if(temp_buf.length()!=0)
    {
        QString Istr;
        Istr=QString::fromLocal8Bit( temp_buf );
        temp_buf.clear()
        QByteArray Ibuf = Istr.toLatin1();
        QList<int> ileft,iright;
        for(int i = 0; i <Istr.length(); i++)
        {
            if(Ibuf[i]=='{')
            {
                ileft<<i;
                j++;
            }
            if(Ibuf[i]=='}')
            {
                iright<<i;
                k++;
            }
        }
        Ibuf.clear();
        ui->recvDate_textEdit->clear();
        if(j == k)
        {
            for(int i = 0; i<k; i++)
            {
                QString Ijson ;
                Ijson = Istr.mid(ileft.at(i),iright.at(i)-ileft.at(i)+1);
                ui->recvDate_textEdit->append(Ijson);
            }
        }
      ileft.clear();
      iright.clear();
      j=0;
      k=0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值