系統1:ThinkPad T570、Windows10、QT5.12.2(Qt Creater 4.8.2)
系統2:NVIDIA Tegra X2 、Ubuntu 16.04LTS、QT5.5.1(Qt Creater 3.5.1)
建立一個Qt Widget Application應用程式,該程式實作的功能為:讀取執行程式所在路徑的上一層路徑下csvdata/CapRas_016_B.csv檔案(該檔案中存放的為double類型的亮度資料),并将讀取到的QString類型的資料轉換為double類型
在mainwindow.cpp中代碼如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QList>
#include <QStringList>
#include <QTextStream>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QString wstrFilePath;
wstrFilePath = qApp->applicationDirPath() + "/../../csvdata/CapRas_016_B.csv" ;
//qApp->applicationDirPath()擷取到目前執行程式所在路徑, ../表示傳回到上一個檔案夾,在window下的路徑比在linux下多一個debug檔案夾(debug模式下)
QString FILE_PATH(wstrFilePath);
QFile csvFile(FILE_PATH);
QStringList CSVList;
CSVList.clear();
if (csvFile.open(QIODevice::ReadWrite))
{
QTextStream stream(&csvFile);
while (!stream.atEnd())
{
CSVList.push_back(stream.readLine());
}
csvFile.close();
int ncolumn,nrow;
nrow = CSVList.size();
ncolumn = nrow;
if(!CSVList.empty())
{
QString strtemp = CSVList.first();
QStringList qslisttemp = strtemp.split(",");
ncolumn = qslisttemp.size();
double *dCsvData = new double[ncolumn*nrow];
//由于ncolumn*nrow個double達到12M,不能放在棧上面,是以不能通過double dCsvData[ncolumn*nrow];的方式申請記憶體,隻能通過new的方式在堆上面申請
for(int i = 0;i<nrow;i++)
{
QString str1 = CSVList.at(i);
QStringList qslist = str1.split(",");
for(int j = 0;j<ncolumn;j++)
{
dCsvData[i*ncolumn+j] = qslist.at(j).toDouble();
}
qDebug()<<dCsvData[i*ncolumn];//輸出每一行的第一個資料
}
}
qDebug() <<"ncolumn = "<<ncolumn<< "nrow = "<<nrow<<"\n";//輸出csv檔案的列和行數
}
}
MainWindow::~MainWindow()
{
delete ui;
}