引言

  目前,为了提高数据校对的效率,使用合理的显示工具完成具体的数据处理,可以加速设计中调试的速度,这也是自行设计上位机的意义所在。数据处理在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. 【Unity3D】Shader常量、变量、结构体、函数

    1 源码路径 ​ Unity Shader 常量.变量.结构体.函数一般可以在 Unity Editor 安装目录下面的[Editor\Data\CGIncludes\UnityShader]目录下查 ...

  2. 【Unity3D】异步Socket通讯

    1 前言 ​ 同步 Socket 通讯 中的 Accept.Connect.Receive 等方法会阻塞当前线程,当前线程必须等待这些方法执行完,才会继续往下执行,用户需要另开线程执行这些耗时方法,否 ...

  3. Vue+SpringBoot+ElementUI实战学生管理系统-8.班级管理模块

    1.章节介绍 前一篇介绍了专业管理模块,这一篇编写班级管理模块,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.实现效果 班级列表 修改班级 4.模块 ...

  4. JS实现提示文本框可输入剩余字数

    最近在设计写博客功能时,涉及到留言框输入字数限制,需要给用户剩余数字提示. 参考文章:https://www.cnblogs.com/crazytrip/p/4968230.html 实现效果: 源码 ...

  5. 硬件开发笔记(八): 硬件开发基本流程,制作一个USB转RS232的模块(七):创建基础DIP元器件(晶振)封装并关联原理图元器件

    前言   有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的.为了更好的表述封装设计过程,本文描述了创建晶振封装(DIP),将原理图的 ...

  6. python字符串模板文本处理之Template

    from string import Template s = Template('$who 在 $do') ts = s.substitute(who="张三", do=&quo ...

  7. Flask AttributeError 'Request' object has no attribute 'is_xhr'解决办法

    flask版本0.12.5 运行时会报以上错误,原因是因为werkzeug的版本大于等于1.x版本. 解决办法,降低werkzeug的版本即可 pip uninstall Werkzeug pip i ...

  8. .NET Core 集成微信支付签名错误

    .NET Core 集成微信支付签名错误 The provided data is tagged with 'Universal' class value '16', but it should ha ...

  9. vue upload 图片转base64、转二进制数组,保存编码数据到文件

    功能需求 1.图片转base64 2.base 64 转二进制数组 3.保存二进制数据到文件下载到本地 解决方法 问题1: 参考资料 vue element upload图片 转换成base64 具体 ...

  10. java中sha1.md5,base64到底怎么回事

    MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.MD5用的是哈希函数,在计算机网络中应用 ...