编写Qt读取 txt文件的函数,txt文件中的数据是double类型,且每行只有一个数据,一共37行
时间: 2023-07-16 19:15:51 浏览: 193
下面是一个简单的示例代码,它可以从txt文件中读取double类型的数据,每行只有一个数据,一共37行:
```cpp
#include <QFile>
#include <QTextStream>
QVector<double> readDataFromFile(const QString& fileName) {
QVector<double> data;
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
return data;
}
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
bool ok;
double value = line.toDouble(&ok);
if (ok) {
data.append(value);
}
}
file.close();
return data;
}
```
你可以调用这个函数并传递txt文件的文件名作为参数。它会返回一个QVector<double>类型的对象,其中包含了从文件中读取的所有double类型数据。注意,如果文件无法打开,则该函数将返回一个空的QVector<double>对象。
相关问题
QT读取txt文件并且以TXT文件内容实时绘图
你可以使用Qt中的QFile和QTextStream类来逐行读取txt文件,并使用QCustomPlot库来实时绘图。以下是一个简单的示例代码:
```
// 创建QCustomPlot对象
QCustomPlot *customPlot = new QCustomPlot(this);
// 设置图表大小和标题
customPlot->setFixedSize(800, 600);
customPlot->plotLayout()->insertRow(0);
customPlot->plotLayout()->addElement(0, 0, new QCPTextElement(customPlot, "Real-time Plot", QFont("sans", 12, QFont::Bold)));
// 创建文件对象
QFile file("yourfile.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
// 创建QVector对象保存数据
QVector<double> x, y;
int i = 0;
// 创建定时器对象并连接到槽函数
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(plotGraph()));
// 定义绘图槽函数
void YourClass::plotGraph() {
// 读取下一行数据
QString line = in.readLine();
// 将数据添加到QVector中
x.append(i);
y.append(line.toDouble());
// 绘制曲线
customPlot->addGraph();
customPlot->graph()->setData(x, y);
customPlot->xAxis->setLabel("X");
customPlot->yAxis->setLabel("Y");
customPlot->xAxis->setRange(0, i);
customPlot->yAxis->setRange(0, 100);
customPlot->replot();
++i;
}
// 启动定时器
timer->start(1000); // 每秒刷新一次
```
这个代码片段创建了一个QCustomPlot对象并设置了图表的大小和标题。然后,它打开了一个名为 "yourfile.txt" 的文件,并使用QTextStream逐行读取文件内容。它创建了一个QVector对象来保存数据,并创建了一个定时器对象来定期刷新绘图。在绘图槽函数中,它读取下一行数据并将其添加到QVector中。然后,它使用QCustomPlot绘制曲线,并在每次绘制后调用replot()函数来更新图表。最后,它启动了定时器并将其连接到槽函数中。
QT读取TXT文件并绘图
以下是使用QT读取TXT文件并绘图的步骤:
1.首先,需要在QT中创建一个新的项目,并在项目中添加一个QCustomPlot库,该库可以用于绘制图形。
2.在项目中创建一个新的类,用于读取和处理TXT文件。可以使用QFile和QTextStream类来读取TXT文件中的数据,并将其存储在QVector中。
3.在主窗口中,创建一个QCustomPlot对象,并使用QVector中的数据绘制所需的图形。可以使用QCPGraph类来绘制线条图或散点图。
4.最后,将读取和绘图的代码整合到一起,并在主窗口中调用该类的函数来读取和绘制图形。
下面是一个简单的示例代码,用于读取名为“data.txt”的文件,并绘制其数据的散点图:
```cpp
// readtxt.h
#ifndef READTXT_H
#define READTXT_H
#include <QString>
#include <QVector>
class ReadTxt
{
public:
ReadTxt(QString path);
QVector<double> getXData(); QVector<double> getYData();
private:
QVector<double> xData;
QVector<double> yData;
};
#endif // READTXT_H
// readtxt.cpp
#include "readtxt.h"
#include <QFile>
#include <QTextStream>
ReadTxt::ReadTxt(QString path)
{
QFile file(path); if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
QStringList fields = line.split(",");
xData.append(fields[0].toDouble());
yData.append(fields[1].toDouble());
}
}
QVector<double> ReadTxt::getXData()
{
return xData;
}
QVector<double> ReadTxt::getYData()
{
return yData;
}
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "qcustomplot.h"
#include "readtxt.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QCustomPlot *customPlot;
};
#endif // MAINWINDOW_H
// mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
customPlot = new QCustomPlot(this);
setCentralWidget(customPlot);
ReadTxt *reader = new ReadTxt("data.txt");
QVector<double> xData = reader->getXData();
QVector<double> yData = reader->getYData();
QCPGraph *graph = customPlot->addGraph();
graph->setData(xData, yData);
graph->setLineStyle(QCPGraph::lsNone);
graph->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, 5));
customPlot->xAxis->setLabel("X Axis");
customPlot->yAxis->setLabel("Y Axis");
customPlot->rescaleAxes();
customPlot->replot();
}
MainWindow::~MainWindow()
{
delete customPlot;
}
```
阅读全文