一个解析csv数据的小工具,所做项目中要查看脉冲图谱,经理就让我这个刚入职的小萌新写了个小程序。同事将csv格式的脉冲数据发给我,我的想法就是,将这些csv里的数据作为纵轴,x++为横轴,绘制出折线图,并将幅值整体偏低的脉冲加上个系数显示出来。

  因为用到了QChart,所以在.pro文件中先加语句 QT += charts

在ui界面中,加入了一个 Widget控件显示折线图(chart_view),在控件lineedit显示打开文件的路径和文件名,控件textedit显示打开的csv文本里的数据。点击按钮“打开文件”后,就可以选择要打开的文件,选好后,会显示出图谱和文件路径和csv中数据。点击“保存文件”把csv数据保存到本地为.txt文本。

  

代码:

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QFile>
  4. #include <QFileDialog>
  5. #include <QMessageBox>
  6. #include <QtCharts/QChartView>//显示图表
  7. #include <QtCharts/QLineSeries>//线系列
  8. #include <QFileDialog>
  9. #include <QDir>
  10. #include <QString>
  11. #include <QStringList>
  12. #include <QDebug>
  13. #include <QtCore/QTextStream>
  14. #include <QtCore/QIODevice>
  15.  
  16. MainWindow::MainWindow(QWidget *parent)
  17. : QMainWindow(parent)
  18. , ui(new Ui::MainWindow)
  19. {
  20. ui->setupUi(this);
  21.  
  22. setWindowTitle("pluse脉冲解析");
  23. setFixedSize(940,740);
  24. connect(ui->btn_read, &QPushButton::clicked, this ,[=](){//打开文件
  25.  
  26. QT_CHARTS_USE_NAMESPACE
  27.  
  28. QString FileName = QFileDialog::getOpenFileName(this,"打开文件","C:\\");
  29. if(FileName.isEmpty() == true)
  30. {
  31. QMessageBox::warning(this,"warning","open file failed!");
  32. return;
  33. }
  34. ui->lineEdit->setText(FileName);
  35.  
  36. QList<QLineSeries *> m_series;
  37. QLineSeries *series = new QLineSeries();
  38. m_series.append(series);
  39.  
  40. //设置线条名称
  41. series->setName(QString("csv解析图谱"));
  42.  
  43. //设置线条颜色,如果不设置会给默认颜色
  44. series->setColor(QColor(255,0,255));
  45. //设置是否线条可视
  46. series->setVisible(true);
  47.  
  48. //点标签是否可视
  49. series->setPointLabelsVisible(true);
  50.  
  51. //点标签颜色
  52. series->setPointLabelsColor(QColor(255,255,255));
  53.  
  54. //点标签字体
  55. series->setPointLabelsFont(QFont("微软雅黑"));
  56.  
  57. //设置点标签显示格式
  58. series->setPointLabelsFormat(" ");
  59. //series->setPointLabelsFormat("(@xPoint,@yPoint)");
  60.  
  61. //是否切割边缘点标签,默认为true
  62. series->setPointLabelsClipping(false);
  63.  
  64. //设置点标签是否可视
  65. //series->setPointsVisible(true);
  66.  
  67. QFile file(FileName);
  68. if(file.open(QIODevice::ReadOnly))
  69. {
  70. QTextStream stream(&file);
  71. while(!file.atEnd())
  72. {
  73. QStringList list = stream.readAll().split('\n');
  74. QListIterator<QString> li(list);
  75. QString str = list.join(",");
  76.  
  77. QString str1 = str.simplified(); //去除字符串前后的空白符,并用“ ”分开
  78. str1.remove(QRegExp("\\s")); //去除所有字符串中出现的“ ”
  79. QString str2 = str1.section(",",0,1023); //只取脉冲信号列表的前1024项
  80. ui->textEdit->setText(str2);
  81.  
  82. float buf;
  83. int x = 1;
  84. series->clear();
  85. while(li.hasNext())
  86. {
  87.  
  88. buf=li.next().toFloat();
  89. if(x <= 1024)
  90. {
  91. series->append(x,buf * 32768);
  92. x++;
  93. }
  94. else
  95. break;
  96. }
  97. }
  98. }
  99.  
  100. QChart *chart = new QChart();
  101. chart->setTheme(QChart::ChartThemeBlueCerulean);//设置系统主题
  102. chart->setAnimationOptions(QChart::AllAnimations);//设置启用或禁用动画
  103. chart->setLocalizeNumbers(true);//数字是否本地化
  104. chart->addSeries(series);//添加系列到QChart上
  105.  
  106. chart->createDefaultAxes();//创建默认轴
  107. chart->setTitle("脉冲图像");//设置标题
  108. chart->setTitleBrush(QBrush(QColor(25,170,255)));//设置标题Brush
  109. chart->setTitleFont(QFont("微软雅黑"));//设置标题字体
  110.  
  111. chart->legend()->setVisible(true);
  112. chart->legend()->setAlignment(Qt::AlignBottom);//底部对齐
  113. chart->legend()->setBackgroundVisible(true);//设置背景是否可视
  114. chart->legend()->setLabelColor(QColor(255,128,255));//设置标签颜色
  115. chart->legend()->setVisible(true);//设置是否可视
  116. chart->legend()->setBorderColor(QColor(255,255,170,185));//设置边框颜色
  117. QFont font = chart->legend()->font();
  118. font.setItalic(!font.italic());
  119. chart->legend()->setFont(font);//设置字体为斜体
  120. font.setPointSizeF(12);
  121. chart->legend()->setFont(font);//设置字体大小
  122. chart->legend()->setFont(QFont("微软雅黑"));//设置字体类型
  123.  
  124. QChartView *chartView = new QChartView(chart);
  125. QGridLayout *baselayout = new QGridLayout();
  126.  
  127. baselayout->addWidget(chartView,1,0);
  128. chartView->setChart(chart);
  129. ui->chart_view->setLayout(baselayout);
  130.  
  131. connect(ui->btn_save,&QPushButton::clicked,this,[=](){//保存文件
  132. QFile sfile("pluse.txt");
  133. if(sfile.open(QFile::WriteOnly))
  134. {
  135. QTextStream out(&sfile);
  136. //out<<ui->textEdit->setText()
  137. out<<ui->textEdit->toPlainText()<<endl<<QObject::tr("");
  138. QMessageBox::warning(this,"保存中...","文件保存成功!");
  139. }
  140. });
  141.  
  142. file.close();
  143.  
  144. });
  145.  
  146. }
  147.  
  148. MainWindow::~MainWindow()
  149. {
  150. delete ui;
  151. }

  目前还稍微有点小漏洞,就是不能在界面连续读取文件显示曲线图并保存,各位大佬要是有什么好办法,感谢分享呀!!

解析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. Go版本依赖--伪版本

    目录 1.简介 2. 什么是伪版本 3. 伪版本风格 4. 如何获取伪版本 1.简介 在go.mod中通常使用语义化版本来标记依赖,比如v1.2.3.v0.1.5等.因为go.mod文件通常是go命令 ...

  2. Faiss使用多线程出现的性能问题

    Faiss使用多线程出现的性能问题 faiss在增加CPU的情况下,反而出现效率低下的问题. 从理论上看,作为一个CPU/GPU计算型的应用,更多的核意味着更大的计算吞吐能力,性能只会越来越好才是. ...

  3. IDEA中的Git操作,看这一篇就够了!

    大家在使用Git时,都会选择一种Git客户端,在IDEA中内置了这种客户端,可以让你不需要使用Git命令就可以方便地进行操作,本文将讲述IDEA中的一些常用Git操作. 环境准备 使用前需要安装一个远 ...

  4. 阿里云服务器上部署java项目(安装jdk,tomcat)

    安装JDK a.执行下面的yum指令安装,无线配置环境变量. 1.yum -y update #首先更新一下YUM源2.yum list Java* ---------#列出所有的JDK 3.yum ...

  5. MPI集群搭建

    高性能计算     ubantu下集群搭建 参考博客:https://blog.csdn.net/u012304016/article/details/52423738(尊重别人的知识产权),一些细节 ...

  6. Vue 2.0 与 Vue 3.0 响应式原理比较

    Vue 2.0 的响应式是基于Object.defineProperty实现的 当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 prop ...

  7. Mybatis(三)——全局配置文件

    二.properties     三.settings 四.typeAilases 这里不做介绍.

  8. vue 双向绑定(v-model 双向绑定、.sync 双向绑定、.sync 传对象)

    1. v-model实现自定义组件双向绑定 v-model其实是个语法糖,如果没按照相应的规范定义组件,直接写v-model是不会生效的.再说一遍,类似于v-on:click可以简写成@click,v ...

  9. ubantu硬盘不足,无法启动

    我的ubantu虚拟机经过我一顿操作后,就起不来了.然后经过多方询问,广集天下良方,最终发现是由于分配的硬件空间不足导致的.现象如下: 通过查看 root@ubantu:/snap# df -h Fi ...

  10. Java中HashCode()和equals()的作用

    引言 我们知道Java中的集合(Collection)大致可以分为两类,一类是List,再有一类是Set. 前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复. 这里就引出一个问题: ...