一個解析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; }
目前還稍微有點小漏洞,就是不能在界面連續讀取文件顯示曲線圖並保存,各位大佬要是有什么好辦法,感謝分享呀!!