QT读取csv文件并且绘制折线图

void MainWindow::readcsvfile() //读取csv
{
 QFile csvFile("C:/Users/Administrator/Desktop/Demo/0702.CSV");
 QStringList csvList;
 csvList.clear();
 if (csvFile.open(QIODevice::ReadWrite)) //对csv文件进行读写操作
 {
  QTextStream stream(&csvFile);
  while (!stream.atEnd())
 {
 csvList.push_back(stream.readLine()); //保存到List当中
 }
 csvFile.close();
 }
 else
 {
	 QMessageBox::about(NULL, "csv文件", "未打开该文件!");
 }
   int i = 0;
   Q_FOREACH(QString str, csvList)   //遍历List
  {
   i = i + 1;
   QStringList valsplit = str.split(","); //分隔字符串
   if(i > 2)
   {
    //得到深度、声速、温度
    QString depth = valsplit[0];
    QString sonicvelocity = valsplit[1];
    QString temperature = valsplit[2];
    double depthvalue = depth.toDouble();
    double sonicvalue = sonicvelocity.toDouble();
    double tempvalue = temperature.toDouble();
	//Q//MessageBox::warning(NULL, "dd", QString::number(tempvalue));
	QPointF point;
    point.setX(depthvalue);
    point.setY(sonicvalue);
	QPointF point2;
	point2.setX(depthvalue);
	point2.setY(tempvalue + 1510);
    vectors.append(point);
	vector2.append(point2);
   }
  }
}

void MainWindow::lineChart() //绘制图
{
    //设置X,Y标题
    ui->qwtPlot->setAxisTitle(QwtPlot::xBottom, QString::fromLocal8Bit("深度(m)"));
    ui->qwtPlot->setAxisTitle(QwtPlot::yLeft, QString::fromLocal8Bit("声速(m/s)"));
    ui->qwtPlot->setAxisTitle(QwtPlot::yRight, QString::fromLocal8Bit("温度(°C)"));
    ui->qwtPlot->enableAxis(QwtPlot::yRight,true);
    ui->qwtPlot->setAxisScale(QwtPlot::yLeft,1538,1540,0.2);
    ui->qwtPlot->setAxisScale(QwtPlot::xBottom,0,30,2);
    ui->qwtPlot->setAxisScale(QwtPlot::yRight,28,30,0.2);

	//ui->qwtPlot->set
    //构造曲线数据
     QwtPointSeriesData* series = new QwtPointSeriesData(vectors);
	 //设置网格
	 QwtPlotGrid* grid = new QwtPlotGrid();
	 grid->setPen(QColor(222, 222, 222), 1);
	 grid->attach(ui->qwtPlot);
	 //create plot item
     QwtPlotCurve* curve1 = new QwtPlotCurve(QString::fromLocal8Bit("声速"));
     //设置数据
	 curve1->setData(series);
	 //设置画笔颜色==就是图像颜色
	 curve1->setPen(QColor(255, 0, 0), 2, Qt::SolidLine);
	 //使曲线更光滑
	 curve1->setCurveAttribute(QwtPlotCurve::Fitted, true);
	 //把曲线附加到qwtPlot上
     curve1->attach(ui->qwtPlot);
     //添加温度-深度曲线
	 //构造曲线数据
	 QwtPointSeriesData* series2 = new QwtPointSeriesData(vector2);
	 //create plot item
	 QwtPlotCurve* curve2 = new QwtPlotCurve(QString::fromLocal8Bit("温度"));
	 //设置数据
	 curve2->setData(series2);
	 //设置画笔颜色=图像颜色
	 curve2->setPen(QColor(127, 222, 335), 2, Qt::SolidLine);
	 //使曲线更光滑
	 curve2->setCurveAttribute(QwtPlotCurve::Fitted, true);
	 //把曲线附加到qwtPlot上
	 curve2->attach(ui->qwtPlot);

	 //设置图例
	 QwtLegend *legend = new QwtLegend;
	 legend->setDefaultItemMode(QwtLegendData::ReadOnly);
	 ui->qwtPlot->insertLegend(legend,QwtPlot::BottomLegend);//插入图例
	 ui->qwtPlot->replot();
     ui->qwtPlot->show();
}

需要第三方库QWT

 

运行结果:

 

您好,关于 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 文件,您可能需要根据实际情况修改代码,以便正确解析数据。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Music 爱好者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值