原创 QT 串口数据折线图显示

2023-4-10 11:49 2386 13 13 分类: MCU/ 嵌入式 文集: QT学习
串口将接收到的数据,进行解析后,使用QT绘图,动态刷新显示。

先将项目文件中增加charts支持

QT += charts

在主窗口定义中增加

QT_CHARTS_USE_NAMESPACE

ui中使用graphic view 控件占用图形显示的位置,并将控件提升为QChartView控件。

 Qchart 可以绘制折线、条形图或饼图。折线需要有QLineSeries 容纳折线的坐标数据。先定义私有成员    QLineSeries *LineSerial,需要在构造函数中实例化。

chart = new QChart();
  • chart->legend()->hide();
  • chart->addSeries(LineSerial); //将线性序列加入到图
  • QValueAxis *xaxis = new QValueAxis(); //建立X,Y轴
  • QValueAxis *yaxis = new QValueAxis();
  • xaxis->setRange(0,20); // 设定 数轴范围
  • yaxis->setRange(0,10);</p><p class="MsoNormal" align="left" style="text-align:left;text-indent:24.0pt;
  • mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt">[code]chart->addAxis(yaxis,Qt::AlignLeft);
  • chart->addAxis(xaxis,Qt::AlignBottom);
  • LineSerial->attachAxis(xaxis);
  • LineSerial->attachAxis(yaxis);
  • 复制代码

    chart->setTitle("Simple line chart example"); //设定图的抬头

    ui->chatview->setChart(chart); // 将 图加入到chatview
    [/code]

    这样就可以将折线图显示出来了。

    使用串口数据动态刷新折线图

    在串口接收的槽函数中,收到的数据是使用readall(),读到一个QString里面,但有可能只是零碎的数据片段。获得数据后,追加到先前接收到的数据后面,再进行处理。这里有一个专门的处理函数,在槽函数中调用。依据要求,传入数据段指针和需要处理的数据序列指针。使用QString中的各种方法,判断数据是不是完整的,找到数据头和尾。然后进行解析,将合法数据追加到数据序列里。

    int bubfreqscanpharse(QString *p,QLineSeries *pls){
  • int npos = p->indexOf("@ 6.00 MHz");
  • int ret = 0;
  • static int linecolor = 0;
  • if(npos != -1){
  • if(p->right(2)=="\r\n"){
  • // QDebug() << "get tail";
  • QStringList datlist = p->split("@");
  • if(datlist.size()==42){
  • int i;
  • float x,y;
  • pls->clear();
  • for(i=1;i<42;i++){
  • x = datlist[i].mid(1,4).toFloat();
  • y = datlist[i].mid(11,4).toFloat();
  • pls->append(x,y);
  • }
  • pls->setColor(QColor(qrand()%255,qrand()%255,qrand()%255));
  • ret = 1;
  • }
  • p->clear();
  • }
  • }
  • return ret;
  • }
  • 复制代码

    串口接收处理槽函数

    void MainWindow::readData()
  • {
  • QString data = serial->readAll(); // 串口收到的数据放到data中
  • buf->append(data); // 追加data到接收缓冲区
  • ui->lineEdit->setText(data); // 显示刚收到的数据
  • // 调用数据处理函数,并传入缓冲区数据和链接到图的数据序列指针
  • if(bubfreqscanpharse(buf,LineSerial) == 1){
  • chart->createDefaultAxes();
  • }
  • }
  • 复制代码

    作者: southcreek, 来源:面包板社区

    链接: https://mbb.eet-china.com/blog/uid-me-408807.html

    版权声明:本文为博主原创,未经本人允许,禁止转载!

    PARTNER CONTENT

    文章评论1条评论)

    登录后参与讨论

    southcreek 2023-8-21 10:29

    构建时如果出现
    unknown type name 'qchartview'
    需要在ui_xxx.h 文件中包含
    #include <QtCharts>
    相关推荐阅读
    southcreek 2025-01-22 06:34
    设置可执行程序图标
    在本文的示例中,图标文件名称为“logo.ico”,该文件位于项目主目录下。2.2 设置标题栏图标通过下列函数设置标题栏图标:setWindowIcon(QIcon("://logo.ico"));1...
    southcreek 2024-12-04 16:32
    PWM输出隔离DAC设计
    这个设计的目标是产生一个隔离的DAC输出。12V供电,产生0~5V的输出。达到10000约13.3位的分辨率。要求DAC输出在改变设置后1S内能稳定。需要能长时间保持稳定和低噪声。能达到要求的DAC只...
    southcreek 2024-12-04 15:23
    一个基于HAL库的串口控制框架
    将串口接收配置为 DMA方式,DMA 使用 DMA_CIRCULAR 模式工作。串口接收的数据实际上构成循环队列。 定义一个结构Comm_typedef 结构体中包含指向接收到的第一字节位置chrc...
    southcreek 2024-07-08 11:38
    接地不良导致的故障分析
    这个电路的控制板需要连接显示板和识别板。5V 供电和串行控制连到显示板,显示板再连接到识别板。识别板上电位器使用一个LDO供电,将输入的5V转成3.3V。当电位器滑动时,输出电压在0~3.3V之间。...
    southcreek 2024-06-26 09:15
    【EMC整改】带辅助加热的滴速控制器辐射抗扰整改
    这个滴速式的输液泵使用一个红外线发射和接收装置,当有液滴通过时,会扰动检测信号,识别这个扰动检测到液滴滴下,获得滴壶中的液滴速度,调整阀门大小,实现输液速度控制。控制器还配备一根加热条,用于输液时对药...
    southcreek 2024-06-06 08:52
    QT 使用QSettings 操作ini文件配合表格操作
    这个项目可以演示 使用QSetting 读取或写入 ini文件。并使用tablewidget 显示。Ini文件的格式如下,这个文件可以事先编写。也可以在程序中生成。有一个大类,下面有一个小类使用等号设...
    我要评论
    1
    13
    关闭 站长推荐上一条 /3 下一条