引言

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

  1. QT QTableView用法小结

    QTableView常用于实现数据的表格显示.下面我们如何按步骤实现学生信息表格: 一 添加表头 //准备数据模型 QStandardItemModel *student_model = new QS ...

  2. qt之串口

                                          qt串口讲解在QT中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也使用这个 ...

  3. Qt MVC(模型-视图-代理)

    实习刚才是一段时间,公司这边就要求熟悉这个mvc.一般开始都是用tableview,前面的blog我都是使用listview居多,并且相对delegate这个使用的多余model.接下来说下model ...

  4. Qt——树的搜索

    一.Qt中的树 Qt中树的实现有两种方式.第一种是使用Qt提供的QTreeWidget,很多函数都封装好,比较方便:另一种是通过QTreeView实现,设置它的数据模型,比如使用QStandardIt ...

  5. Qt Model/View(官方翻译,图文并茂)

    http://doc.trolltech.com/main-snapshot/model-view-programming.html 介绍 Qt 4推出了一组新的item view类,它们使用mode ...

  6. Qt 串口学习3

    1.怎样将选择波特率 1)使用if else 的方法     if(ui->BaudRate->currentText()==tr("9600"))   //根据组合框 ...

  7. Qt之模型/视图(自定义按钮)

    简述 衍伸前面的章节,我们对QTableView实现了数据显示.自定义排序.显示复选框.进度条等功能的实现,本节主要针对自定义按钮进行讲解,这节过后,也希望大家对自定义有更深入的了解,在以后的功能开发 ...

  8. 【转】Qt数据库总结

    转自:http://blog.chinaunix.net/uid-25201977-id-3014100.html #include <QtSql>QT += sql QSqlDataba ...

  9. QT 操作数据库

    整理一下 QT 操作数据库的一些要点,以备以后的查询学习(主要是操作 mysql ). 首先,要查询相关的驱动是否已经装好了,可以用以下的程序进行验证: #include <QtCore/QCo ...

  10. Qt之QTableView添加复选框(QAbstractTableModel)

    简述 使用QTableView,经常会遇到复选框,要实现一个好的复选框,除了常规的功能外,还应注意以下几点: 三态:不选/半选/全选 自定义风格(样式) 下面我们介绍一下常见的实现方式: 编辑委托. ...

随机推荐

  1. 从零开始手写 mybatis(二)mybatis interceptor 插件机制详解

    前景回顾 第一节 从零开始手写 mybatis(一)MVP 版本 中我们实现了一个最基本的可以运行的 mybatis. 常言道,万事开头难,然后中间难. mybatis 的插件机制是 mybatis ...

  2. Js中Proxy对象

    Js中Proxy对象 Proxy对象用于定义基本操作的自定义行为,例如属性查找.赋值.枚举.函数调用等. 语法 const proxy = new Proxy(target, handler); ta ...

  3. SpringBoot+Shiro+LayUI权限管理系统项目-4.实现部门管理

    1.说明 只讲解关键部分,详细看源码,文章下方捐赠或QQ联系捐赠获取. 2.功能展示 3.业务模型 @Data @EqualsAndHashCode(callSuper = false) @Acces ...

  4. Oracle 高水位(HWM: High Water Mark) 说明

    一. 准备知识:ORACLE的逻辑存储管理. ORACLE在逻辑存储上分4个粒度: 表空间, 段, 区 和 块. 1.1 块: 是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操 ...

  5. js与java使用AES加密算法实现前后端加密解密

    AES加密算法入门:https://blog.csdn.net/IndexMan/article/details/87284833 第三方crypto.js下载地址:https://download. ...

  6. StretchDIBits在一些图像尺寸下失败

    StretchDIBits用来打印图像,但是由于某种未知的原因,当图像达到特定尺寸时,它会失败. 图像数据从其他一些图像源以24位BGR格式加载到无符号int数组中.它可以在某些大小下工作,但根本无法 ...

  7. IntelliJ IDE使用指南

    下载IDEA 注释模板 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME}; ...

  8. FileBeat简单使用

    简介 首先要了解ELK架构 这种结构因为需要在各个服务器上部署 Logstash,而它比较消耗 CPU 和内存资源,所以比较适合计算资源丰富的服务器,否则容易造成服务器性能下降,甚至可能导致无法正常工 ...

  9. udp循环发消息,sockerserver,文件校验,服务器合法性校验---day29

    1.udp循环发消息 # ### 客户端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) while True: #发送消息 mess ...

  10. 【Python语法糖】闭包和装饰器

    Python闭包和装饰器 参考: https://zhuanlan.zhihu.com/p/453787908 https://www.bilibili.com/video/BV1JW411i7HR/ ...