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可以快速地完成数据显示的设计,用于数据的分析处理。
附件
QT之数据显示的更多相关文章
- QT QTableView用法小结
QTableView常用于实现数据的表格显示.下面我们如何按步骤实现学生信息表格: 一 添加表头 //准备数据模型 QStandardItemModel *student_model = new QS ...
- qt之串口
qt串口讲解在QT中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也使用这个 ...
- Qt MVC(模型-视图-代理)
实习刚才是一段时间,公司这边就要求熟悉这个mvc.一般开始都是用tableview,前面的blog我都是使用listview居多,并且相对delegate这个使用的多余model.接下来说下model ...
- Qt——树的搜索
一.Qt中的树 Qt中树的实现有两种方式.第一种是使用Qt提供的QTreeWidget,很多函数都封装好,比较方便:另一种是通过QTreeView实现,设置它的数据模型,比如使用QStandardIt ...
- Qt Model/View(官方翻译,图文并茂)
http://doc.trolltech.com/main-snapshot/model-view-programming.html 介绍 Qt 4推出了一组新的item view类,它们使用mode ...
- Qt 串口学习3
1.怎样将选择波特率 1)使用if else 的方法 if(ui->BaudRate->currentText()==tr("9600")) //根据组合框 ...
- Qt之模型/视图(自定义按钮)
简述 衍伸前面的章节,我们对QTableView实现了数据显示.自定义排序.显示复选框.进度条等功能的实现,本节主要针对自定义按钮进行讲解,这节过后,也希望大家对自定义有更深入的了解,在以后的功能开发 ...
- 【转】Qt数据库总结
转自:http://blog.chinaunix.net/uid-25201977-id-3014100.html #include <QtSql>QT += sql QSqlDataba ...
- QT 操作数据库
整理一下 QT 操作数据库的一些要点,以备以后的查询学习(主要是操作 mysql ). 首先,要查询相关的驱动是否已经装好了,可以用以下的程序进行验证: #include <QtCore/QCo ...
- Qt之QTableView添加复选框(QAbstractTableModel)
简述 使用QTableView,经常会遇到复选框,要实现一个好的复选框,除了常规的功能外,还应注意以下几点: 三态:不选/半选/全选 自定义风格(样式) 下面我们介绍一下常见的实现方式: 编辑委托. ...
随机推荐
- 【Unity3D】UGUI之Image和RawImage
1 纹理(Texture) Image 控件和 RawImage 控件都是承载渲染图片的控件,都需要指定一个纹理(Texture)图片.在 Assets 窗口选中一张图片,在 Inspector ...
- 【Unity3D】Transform组件
1 前言 每个游戏对象有且仅有一个 Transform 组件,Transform 组件保存了游戏对象的位置信息,用户可以通过操作 Transform 组件实现对游戏对象的平移.旋转.缩放等变换.每 ...
- MySQL数据库备份与恢复方法
MySQL数据库备份与恢复方法 mysql -uroot -p show databases; 1.导出数据库 1).MySQL命令行导出整个数据库(包含数据) 导出文件默认是存在mysql\bin目 ...
- 高并发时为什么推荐ReentrantLock而不是synchronized
目录 1.最初的 synchronized 2.synchronized 的优化 3.但是,JAVA的最终答案 JDK 21 LTS 来了 1.最初的 synchronized 它默认对临界资源添加重 ...
- golang中协程&管道&锁
进程和线程 进程(Process)就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基 本单位,进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进 程都有一个自己的地 ...
- Vulnhub内网渗透DC-7靶场通关
个人博客: xzajyjs.cn DC系列共9个靶场,本次来试玩一下一个 DC-7,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题.靶场推 ...
- Redis高级系列详解
01-Redis系列之-Redis介绍安装配置 02-Redis系列之-架构和高级API的使用 03-Redis系列之-高级用法详解 04-Redis系列之-持久化(RDB,AOF) 05-Redis ...
- 面试官:说一下红锁RedLock的实现原理?
RedLock 是一种分布式锁的实现算法,由 Redis 的作者 Salvatore Sanfilippo(也称为 Antirez)提出,主要用于解决在分布式系统中实现可靠锁的问题.在 Redis 单 ...
- C#多线程(9):多阶段并行线程
目录 前言 Barrier 类 属性和方法 示例 新的示例 说明 前言 这一篇,我们将学习用于实现并行任务.使得多个线程有序同步完成多个阶段的任务. 应用场景主要是控制 N 个线程(可随时增加或减少执 ...
- Java //使用scanner从键盘输入多种类型
1 //1.引入包名 import java.util.Scanner 2 //2.新建Scanner对象 3 Scanner scan = new Scanner(system.in); 4 //3 ...