ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QT之数据显示

2021-07-17 14:02:49  阅读:250  来源: 互联网

标签:显示 QT 数据 chart axisY series buf MainWindow fil


引言

  目前,为了提高数据校对的效率,使用合理的显示工具完成具体的数据处理,可以加速设计中调试的速度,这也是自行设计上位机的意义所在。数据处理在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可以快速地完成数据显示的设计,用于数据的分析处理。

附件

  工程托管

 

标签:显示,QT,数据,chart,axisY,series,buf,MainWindow,fil
来源: https://www.cnblogs.com/electricdream/p/14999463.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有