解析csv数据绘制曲线图
一个解析csv数据的小工具,所做项目中要查看脉冲图谱,经理就让我这个刚入职的小萌新写了个小程序。同事将csv格式的脉冲数据发给我,我的想法就是,将这些csv里的数据作为纵轴,x++为横轴,绘制出折线图,并将幅值整体偏低的脉冲加上个系数显示出来。
因为用到了QChart,所以在.pro文件中先加语句 QT += charts
在ui界面中,加入了一个 Widget控件显示折线图(chart_view),在控件lineedit显示打开文件的路径和文件名,控件textedit显示打开的csv文本里的数据。点击按钮“打开文件”后,就可以选择要打开的文件,选好后,会显示出图谱和文件路径和csv中数据。点击“保存文件”把csv数据保存到本地为.txt文本。
代码:
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <QFile>
- #include <QFileDialog>
- #include <QMessageBox>
- #include <QtCharts/QChartView>//显示图表
- #include <QtCharts/QLineSeries>//线系列
- #include <QFileDialog>
- #include <QDir>
- #include <QString>
- #include <QStringList>
- #include <QDebug>
- #include <QtCore/QTextStream>
- #include <QtCore/QIODevice>
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- setWindowTitle("pluse脉冲解析");
- setFixedSize(940,740);
- connect(ui->btn_read, &QPushButton::clicked, this ,[=](){//打开文件
- QT_CHARTS_USE_NAMESPACE
- QString FileName = QFileDialog::getOpenFileName(this,"打开文件","C:\\");
- if(FileName.isEmpty() == true)
- {
- QMessageBox::warning(this,"warning","open file failed!");
- return;
- }
- ui->lineEdit->setText(FileName);
- QList<QLineSeries *> m_series;
- QLineSeries *series = new QLineSeries();
- m_series.append(series);
- //设置线条名称
- series->setName(QString("csv解析图谱"));
- //设置线条颜色,如果不设置会给默认颜色
- series->setColor(QColor(255,0,255));
- //设置是否线条可视
- series->setVisible(true);
- //点标签是否可视
- series->setPointLabelsVisible(true);
- //点标签颜色
- series->setPointLabelsColor(QColor(255,255,255));
- //点标签字体
- series->setPointLabelsFont(QFont("微软雅黑"));
- //设置点标签显示格式
- series->setPointLabelsFormat(" ");
- //series->setPointLabelsFormat("(@xPoint,@yPoint)");
- //是否切割边缘点标签,默认为true
- series->setPointLabelsClipping(false);
- //设置点标签是否可视
- //series->setPointsVisible(true);
- QFile file(FileName);
- if(file.open(QIODevice::ReadOnly))
- {
- QTextStream stream(&file);
- while(!file.atEnd())
- {
- QStringList list = stream.readAll().split('\n');
- QListIterator<QString> li(list);
- QString str = list.join(",");
- QString str1 = str.simplified(); //去除字符串前后的空白符,并用“ ”分开
- str1.remove(QRegExp("\\s")); //去除所有字符串中出现的“ ”
- QString str2 = str1.section(",",0,1023); //只取脉冲信号列表的前1024项
- ui->textEdit->setText(str2);
- float buf;
- int x = 1;
- series->clear();
- while(li.hasNext())
- {
- buf=li.next().toFloat();
- if(x <= 1024)
- {
- series->append(x,buf * 32768);
- x++;
- }
- else
- break;
- }
- }
- }
- QChart *chart = new QChart();
- chart->setTheme(QChart::ChartThemeBlueCerulean);//设置系统主题
- chart->setAnimationOptions(QChart::AllAnimations);//设置启用或禁用动画
- chart->setLocalizeNumbers(true);//数字是否本地化
- chart->addSeries(series);//添加系列到QChart上
- chart->createDefaultAxes();//创建默认轴
- chart->setTitle("脉冲图像");//设置标题
- chart->setTitleBrush(QBrush(QColor(25,170,255)));//设置标题Brush
- chart->setTitleFont(QFont("微软雅黑"));//设置标题字体
- chart->legend()->setVisible(true);
- chart->legend()->setAlignment(Qt::AlignBottom);//底部对齐
- chart->legend()->setBackgroundVisible(true);//设置背景是否可视
- chart->legend()->setLabelColor(QColor(255,128,255));//设置标签颜色
- chart->legend()->setVisible(true);//设置是否可视
- chart->legend()->setBorderColor(QColor(255,255,170,185));//设置边框颜色
- QFont font = chart->legend()->font();
- font.setItalic(!font.italic());
- chart->legend()->setFont(font);//设置字体为斜体
- font.setPointSizeF(12);
- chart->legend()->setFont(font);//设置字体大小
- chart->legend()->setFont(QFont("微软雅黑"));//设置字体类型
- QChartView *chartView = new QChartView(chart);
- QGridLayout *baselayout = new QGridLayout();
- baselayout->addWidget(chartView,1,0);
- chartView->setChart(chart);
- ui->chart_view->setLayout(baselayout);
- connect(ui->btn_save,&QPushButton::clicked,this,[=](){//保存文件
- QFile sfile("pluse.txt");
- if(sfile.open(QFile::WriteOnly))
- {
- QTextStream out(&sfile);
- //out<<ui->textEdit->setText()
- out<<ui->textEdit->toPlainText()<<endl<<QObject::tr("");
- QMessageBox::warning(this,"保存中...","文件保存成功!");
- }
- });
- file.close();
- });
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
目前还稍微有点小漏洞,就是不能在界面连续读取文件显示曲线图并保存,各位大佬要是有什么好办法,感谢分享呀!!
解析csv数据绘制曲线图的更多相关文章
- 解析csv数据导入mysql的方法
mysql自己有个csv引擎,可以通过这个引擎来实现将csv中的数据导入到mysql数据库中,并且速度比通过php或是python写的批处理程序快的多. 具体的实现代码示例: 代码如下: load d ...
- Highcharts使用CSV格式数据绘制图表
Highcharts使用CSV格式数据绘制图表 CSV(Comma-Separated Values,逗号分隔值文本格式)是採用逗号切割的纯文本数据.通常情况下.每一个数据之间使用逗号切割,几个相关数 ...
- Python 解析构建数据大杂烩 -- csv、xml、json、excel
Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记语言 Html ,但主要对文档和数据 ...
- .net解析csv(C#导表工具)
前言 解析Excel有知名的NPOI库,(Java语言是POI),但是NPOI是不支持解析csv的. csv本质上也是文本文件,可以进行差异对比,更利于解决冲突. 本文对解析csv的几个.net的开源 ...
- Qt解析CSV文件
最近需要解析Excel文件,于是顺带写了解析CSV的代码 定义数据类型LX::Sheet #ifndef LX_H #define LX_H #include <QString> #inc ...
- pgloader 学习(六) 加载csv 数据
关于加载的配置参数都是使用comand file command file 参考格式 LOAD CSV FROM 'GeoLiteCity-Blocks.csv' WITH ENCODING iso- ...
- 分析Python中解析构建数据知识
分析Python中解析构建数据知识 Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记 ...
- 技术干货:Python解析CSV
1. 什么是CSV CSV(Commma-Separated Value)是都好分隔符,其文件以纯文本形式存储表格数据(数字和文本). 案例: 2. 为什么要使用CSV 与专有的二进制文件格式截然不同 ...
- java opencsv解析csv文件
记一次使用opencsv解析csv文件时碰到的坑 最近在开发过程中需要解析csv文件,公司用的解析工具是opencsv,在根据opencsv的官方文档去解析时发现csv文件中含有繁体字,使用其自带的C ...
随机推荐
- Go版本依赖--伪版本
目录 1.简介 2. 什么是伪版本 3. 伪版本风格 4. 如何获取伪版本 1.简介 在go.mod中通常使用语义化版本来标记依赖,比如v1.2.3.v0.1.5等.因为go.mod文件通常是go命令 ...
- Faiss使用多线程出现的性能问题
Faiss使用多线程出现的性能问题 faiss在增加CPU的情况下,反而出现效率低下的问题. 从理论上看,作为一个CPU/GPU计算型的应用,更多的核意味着更大的计算吞吐能力,性能只会越来越好才是. ...
- IDEA中的Git操作,看这一篇就够了!
大家在使用Git时,都会选择一种Git客户端,在IDEA中内置了这种客户端,可以让你不需要使用Git命令就可以方便地进行操作,本文将讲述IDEA中的一些常用Git操作. 环境准备 使用前需要安装一个远 ...
- 阿里云服务器上部署java项目(安装jdk,tomcat)
安装JDK a.执行下面的yum指令安装,无线配置环境变量. 1.yum -y update #首先更新一下YUM源2.yum list Java* ---------#列出所有的JDK 3.yum ...
- MPI集群搭建
高性能计算 ubantu下集群搭建 参考博客:https://blog.csdn.net/u012304016/article/details/52423738(尊重别人的知识产权),一些细节 ...
- Vue 2.0 与 Vue 3.0 响应式原理比较
Vue 2.0 的响应式是基于Object.defineProperty实现的 当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 prop ...
- Mybatis(三)——全局配置文件
二.properties 三.settings 四.typeAilases 这里不做介绍.
- vue 双向绑定(v-model 双向绑定、.sync 双向绑定、.sync 传对象)
1. v-model实现自定义组件双向绑定 v-model其实是个语法糖,如果没按照相应的规范定义组件,直接写v-model是不会生效的.再说一遍,类似于v-on:click可以简写成@click,v ...
- ubantu硬盘不足,无法启动
我的ubantu虚拟机经过我一顿操作后,就起不来了.然后经过多方询问,广集天下良方,最终发现是由于分配的硬件空间不足导致的.现象如下: 通过查看 root@ubantu:/snap# df -h Fi ...
- Java中HashCode()和equals()的作用
引言 我们知道Java中的集合(Collection)大致可以分为两类,一类是List,再有一类是Set. 前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复. 这里就引出一个问题: ...