Qt获取执行文件路径(linux下和window下通用)、读取CSV数据

本文介绍如何使用Qt在Windows和Linux环境下从CSV文件中读取double类型亮度数据,并将其转换为QString再转回double类型的过程。涉及QFile、QTextStream等组件的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统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;
}
您好,关于 Qt 读取 CSV 文件生成动态折线图的代码,我可以为您提供一份示例代码。请注意,由于我是一个 AI,可能对编程细节语法方面的问题无法提供完整解答,但我会尽力帮助您,尽可能提供帮助。以下是示例代码: ```cpp #include <QApplication> #include <QFile> #include <QTextStream> #include <QChart> #include <QChartView> #include <QSplineSeries> int main(int argc, char *argv[]) { QApplication a(argc, argv); // Read CSV file QFile file(":/data.csv"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return -1; QTextStream in(&file); // Create and populate data series QSplineSeries *series = new QSplineSeries(); QStringList headers = in.readLine().split(","); int xIndex = headers.indexOf("x"); int yIndex = headers.indexOf("y"); while (!in.atEnd()) { QStringList line = in.readLine().split(","); qreal x = line.at(xIndex).toDouble(); qreal y = line.at(yIndex).toDouble(); *series << QPointF(x, y); } file.close(); // Create and customize chart QChart *chart = new QChart(); chart->addSeries(series); chart->createDefaultAxes(); chart->setTitle("Dynamic Line Chart"); // Create and customize chart view QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing); chartView->setWindowTitle("Dynamic Line Chart"); chartView->show(); return a.exec(); } ``` 请注意,在此示例代码中,我使用了 Qt 的 QSplineSeries 类来存储显示数据。该类可以自动连接相邻数据点,在创建折线图时生成平滑的曲线。如果您希望使用其他类型的数据系列,可以根据需要进行修改。 另外,在代码中,我从数据文件中读取 CSV 数据,然后将其存储在 QSplineSeries 对象中。如果您的数据源不是 CSV 文件,您可能需要根据实际情况修改代码,以便正确解析数据
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreenHandBruce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值