解析csv数据绘制曲线图
阅读原文时间:2021年10月13日阅读:1

  一个解析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
#include
#include
#include //显示图表
#include //线系列
#include
#include
#include
#include
#include
#include
#include

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

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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章