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