解析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(" "); //是否切割边缘点标签,默认为true series->setPointLabelsClipping(false); 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; }
目前还稍微有点小漏洞,就是不能在界面连续读取文件显示曲线图并保存,各位大佬要是有什么好办法,感谢分享呀!!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步