zoukankan      html  css  js  c++  java
  • QT之数据显示

    引言

      目前,为了提高数据校对的效率,使用合理的显示工具完成具体的数据处理,可以加速设计中调试的速度,这也是自行设计上位机的意义所在。数据处理在LabVIEW中是比较简单的,直接调用即可。在QT中可能需要采用其他的模块。

    学习

      QT5中比较快捷地实现图表的方式是QtCharts库,内置的QChartView和QLineSeries可以完成坐标轴和数据线的创建,配合其他类,可以快速完成一个折线图的创建,可以用于记录数据的变化,在数据处理上有较大的意义。这里以这个图为模块,对文件中的数据进行处理。

      需要注意的点不多,一个是pro中不要忘记添加qt += charts,还有是命名空间QT_CHARTS_USE_NAMESPACE,然后是三个关键变量QChart、QLineSeries和坐标QValueAxis。对这三个变量进行操作,就可以完成图表的初始化和数据的刷新。

    目标

      作为测试用的上位机,记录多个数据的变化趋势是基本的功能。为了提高实用性,这里也是基于文件进行处理。处理过程中采用灵活的正则匹配方式,实现所有的数据的高速处理。预期使用txt文本完成多数据的变化显示。

    结构

    图表显示

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
           ui->setupUi(this);
    
           m_series=new QLineSeries;
           m_chart=new QChart;
    
           m_series=new QLineSeries;
           m_series->setName("ss");
           m_chart->addSeries(m_series);
           m_chart->createDefaultAxes();
    
    
           m_axisX=new QValueAxis;
           m_axisX->setRange(0,60);
           m_axisX->setGridLineVisible(true);
           m_axisX->setTickCount(11);     //标记的个数
           m_axisX->setMinorTickCount(5); //次标记的个数
    
           m_axisY=new QValueAxis;
           m_axisY->setRange(-5,10);
           m_axisY->setGridLineVisible(true);
           m_axisY->setTickCount(6);
           m_axisY->setMinorTickCount(2);
    
    
    
           m_chart->setAxisX(m_axisX,m_series);
           m_chart->setAxisY(m_axisY,m_series);
           m_chart->legend()->hide();
    
           ui->graphicsView->setChart(m_chart);
           ui->graphicsView->setRenderHint(QPainter::Antialiasing);
    
           m_timer.setInterval(1000);
           m_timer.start();
           connect(&m_timer,SIGNAL(timeout()),this,SLOT(handleTimeout()));
    
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_refreshData_clicked()
    {
        int i;
        for(i=0;i<1000;i++)
        {
            m_series->append(i,sin(i));
        }
    }

      前半段代码源自网络,后半段代码简单的定义。

    文本读取

      从txt文本中以单个字节为间隔的方式读取整个串行数据。

        QFile fil(QDir::currentPath()+".txt");
        fil.open(QIODevice::ReadOnly);
        char buf[1];
        qint64  addr;
        qint64  length;
        QString buf_exp(buf);
        QRegExp exp("[0-9a-fA-F]");
        addr=0;
        int i;
        bool toStop;
        toStop = false;
        i=0;
            while(!toStop)
            {
                fil.seek(addr);
                length = fil.read(buf,sizeof (buf));
                buf_exp = buf;
                if(!exp.indexIn(buf_exp))
                {
                    qDebug()<<buf_exp<<":"<<sizeof(buf_exp);
                    int x= atoi(buf);
                    m_series->append(i,x);
                    i++;
                    addr=addr+length;
                }
                else
                {
                    qDebug()<<"error";
                    addr=addr+1;
                }
                if(addr>=fil.size())
                {
                    fil.close();
                    toStop = true;
                }
            }

      为了方便控制位宽,采用单字节读取,后面再逐渐修改正则匹配的形式。

    效果

    上面是基于函数生成的理想波形,下图是基于字节读取的数据。

    结论

      QT5可以快速地完成数据显示的设计,用于数据的分析处理。

    附件

      工程托管

    欢迎在下方评论、转发、分享。
  • 相关阅读:
    《Python for Beginners》学习笔记(2)
    《Python for Beginners》学习笔记(6)
    《Python for Beginners》学习笔记(4)
    《C Primer Plus》阅读笔记(1)
    《Python for Beginners》学习笔记(7)暨结课总结
    《Python for Beginners》学习笔记(5)
    《Python基础教程》读书笔记(1)
    《Python for Beginners》学习笔记(3)
    让Rails版的FCKEditor支持动态设置上传目录
    FCKEditor与rails的集成
  • 原文地址:https://www.cnblogs.com/electricdream/p/14999463.html
Copyright © 2011-2022 走看看