解析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;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值