一个解析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数据绘制曲线图的更多相关文章

  1. 解析csv数据导入mysql的方法

    mysql自己有个csv引擎,可以通过这个引擎来实现将csv中的数据导入到mysql数据库中,并且速度比通过php或是python写的批处理程序快的多. 具体的实现代码示例: 代码如下: load d ...

  2. Highcharts使用CSV格式数据绘制图表

    Highcharts使用CSV格式数据绘制图表 CSV(Comma-Separated Values,逗号分隔值文本格式)是採用逗号切割的纯文本数据.通常情况下.每一个数据之间使用逗号切割,几个相关数 ...

  3. Python 解析构建数据大杂烩 -- csv、xml、json、excel

    Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记语言 Html ,但主要对文档和数据 ...

  4. .net解析csv(C#导表工具)

    前言 解析Excel有知名的NPOI库,(Java语言是POI),但是NPOI是不支持解析csv的. csv本质上也是文本文件,可以进行差异对比,更利于解决冲突. 本文对解析csv的几个.net的开源 ...

  5. Qt解析CSV文件

    最近需要解析Excel文件,于是顺带写了解析CSV的代码 定义数据类型LX::Sheet #ifndef LX_H #define LX_H #include <QString> #inc ...

  6. pgloader 学习(六) 加载csv 数据

    关于加载的配置参数都是使用comand file command file 参考格式 LOAD CSV FROM 'GeoLiteCity-Blocks.csv' WITH ENCODING iso- ...

  7. 分析Python中解析构建数据知识

    分析Python中解析构建数据知识 Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记 ...

  8. 技术干货:Python解析CSV

    1. 什么是CSV CSV(Commma-Separated Value)是都好分隔符,其文件以纯文本形式存储表格数据(数字和文本). 案例: 2. 为什么要使用CSV 与专有的二进制文件格式截然不同 ...

  9. java opencsv解析csv文件

    记一次使用opencsv解析csv文件时碰到的坑 最近在开发过程中需要解析csv文件,公司用的解析工具是opencsv,在根据opencsv的官方文档去解析时发现csv文件中含有繁体字,使用其自带的C ...

随机推荐

  1. servlet中servletContext的五大作用(一)

    获取web的上下文路径 获取全局的参数 作为域对象使用 请求转发 读取web项目的资源文件 package day10.about_servletcontext.get_path; /** * 首先区 ...

  2. Go错误处理正确姿势

    1. panic 在什么情况下使用panic? 在程序启动的时候,如果有强依赖的服务出现故障时panic退出 在程序启动的时候,如果发现有配置明显不符合要求,可以panic退出(预防编程) 其他情况下 ...

  3. for循环操作(for...in、forEach)

    1.for...in语句用于对数组或者对象的属性进行循环操作,是for循环的一种. 注意:该方法可用于数组或对象. 语法:  for(变量 in 对象/数组){} 如: var obj = { nam ...

  4. Dubbo | Dubbo快速上手笔记 - 环境与配置

    目录 前言 1. Dubbo相关概念 1.1 自动服务发现工作原理 2. 启动文件 2.1 zookeeper-3.4.11\bin\zkServer.cmd 2.2 zookeeper-3.4.11 ...

  5. openresty lua-resty-redis 封装 a wrapper for lua-resty-redis 优雅一点点

    搜了一下别人的封装代码,感觉不够优雅,主要是 set_keepalive 的调用时机不太好 我自己下面的代码是利用 coroutine, 每次当前 phase 结束后自动调用 set_keepaliv ...

  6. Windows内核-7-IRP和派遣函数

    Windows内核-7-IRP和派遣函数 IRP以及派遣函数是Windows中非常重要的概念.IRP 是I/O Request Pocket的简称,意思是I/O操作的请求包,Windows中所有Use ...

  7. ysoserial CommonsColletions3分析(2)

    上篇文章讲到CC3的TransformedMap链,这篇我们就来讲一下LazyMap链. 其实LazyMap链还是使用的TemplatesImpl承载payload,InstantiateTransf ...

  8. [第四篇]——Windows Docker 安装之Spring Cloud直播商城 b2b2c电子商务技术总结

    Windows Docker 安装 Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境. Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境, ...

  9. %v的使用

    不同的类型,他们的默认的%v     一个变动的格式化字符串,相当于一个变量,遇到不同类型,就变形成不同的格式. 类型 %v bool %t int/int8/... %d uint/uint8/.. ...

  10. 【JDK】分析 String str=““ 与 new String()

    一.基础概念 为了讲清楚他们的差异,这里先介绍几个概念. 1.1 常量池 所谓常量池:顾名思义就是用来存放一些常量的.该常量是在编译期被确定,并被保存在已编译的.class文件中,其中包括了类,方法, ...