如何读取txt文本中的数据,并显示出来~~

时间:2022-09-29 11:00:04
我有一个存储着吞吐量的txt文本,每行有一个数字代表该时刻的吞吐量,我想把txt中的数据读出来,并把最后一个数据显示到label或者lineedit里(我不知道正常显示数据用什么控件好,刚接触Qt几天,只知道这两个可以显示,如果有其他的也可以啊~~~)

例如文件为throughput.txt:
time1:23.6
time2:21.5
time3:12.3
time4:19.6
...

找了好多本书,没有类似的例子,大部分都是如何读取txt数据的例子程序,没有显示也不知道最终有没有读进来~~


    QFile fp("123.txt");
    QVector<int> array;
    if(fp.open(fp.ReadOnly))
    {
      QTextStream ts(&fp);
      while(!ts.atEnd())
      {
      static int buf;
      ts>>buf;
      array.append(buf);
      }
      fp.close();
    }


求一个例子程序啊~~

13 个解决方案

#1


http://qimo601.iteye.com/blog/1470944
Qfile类来实现你的要求,楼主参考上面链接的内容,我想你就明白了,很简单的。

#2


引用 1 楼  的回复:
http://qimo601.iteye.com/blog/1470944
Qfile类来实现你的要求,楼主参考上面链接的内容,我想你就明白了,很简单的。


谢谢哦~~我先看看,不懂了再问~~

#3



class TestReadFile : public QWidget
{
Q_OBJECT

public:
TestReadFile() : QWidget()
{
treeWidget = new QTreeWidget(this);
treeWidget->setColumnCount(2);

QStringList strColumnTitle;
strColumnTitle.append(tr("时间"));
strColumnTitle.append(tr("吞吐量"));
treeWidget->setColumnWidth(0,80);
treeWidget->setColumnWidth(1,50);
treeWidget->setHeaderLabels(strColumnTitle);
treeWidget->setSelectionMode(QAbstractItemView::SingleSelection);

editFileName = new QPlainTextEdit(this);
editFileName->setMaximumWidth(50);
editFileName->setMaximumHeight(30);
btnDoProcess = new QPushButton(this);
btnDoProcess->setText(tr("读取"));
btnDoProcess->setMaximumWidth(50);

QVBoxLayout* layout = new QVBoxLayout(this);
layout->addWidget(editFileName);
layout->addWidget(btnDoProcess);
layout->addWidget(treeWidget);

connect(btnDoProcess,SIGNAL(clicked()),this,SLOT(doProcess()));

setLayout(layout);
}
~TestReadFile() {}
private slots:
void doProcess()
{
QString fileName  = QApplication::applicationDirPath() + "\\" + editFileName->toPlainText();
QFile fp(fileName);
QVector<float> valueArray;
if(fp.open(fp.ReadOnly))
{
QTextStream ts(&fp);
QString strLine = "";
QStringList NVPair;
bool bSuccess = false;
float fTime = 0.0f;
while(!ts.atEnd())
{
strLine = ts.readLine();
NVPair = strLine.split(":");
if (NVPair.size() != 2)
continue;
fTime = NVPair[1].toFloat(&bSuccess);
if (bSuccess)
{
QTreeWidgetItem* newItem = new QTreeWidgetItem(treeWidget, NVPair);
valueArray.append(fTime);
}
}
fp.close();
}
}

private:
QTreeWidget *treeWidget;
QPlainTextEdit *editFileName;
QPushButton *btnDoProcess;
};

拿到每一行自己用QString进行解析。
结果保存在valueArray中。

#4


放到一个QTextEdit里面。直接写就好了。setText方法

#5


仅供参考:

 

#include <QApplication>
#include <QtGui>
#include <QLabel>
#include <QFile>

int main(int argc,char *argv[])
{
QApplication app(argc,argv);

QFile file("111.txt");
QString aa;

file.open(QIODevice::ReadOnly);
aa=file.readLine();

QLabel *lable=new QLabel(aa);
lable->show();

file.close();
return app.exec();


}

#6


QFile 用这个类实现读数据。。剩下的就是分析和显示了!!

#7


#include <QDebug>

/*****************************************/
    QFile fp("123.txt");
    QVector<int> array;
    if(fp.open(fp.ReadOnly))
    {
      QTextStream ts(&fp);
      while(!ts.atEnd())
      {
      static int buf;
      ts>>buf;
     //********************************加上这一行:/
     qDebug()<<"数据:"<<buf;
      array.append(buf);
      }
      fp.close();
    }

代码这样修改后,运行下,到“应用程序输出”下面看结果

#8


引用 7 楼  的回复:
#include <QDebug>

/*****************************************/
  QFile fp("123.txt");
  QVector<int> array;
  if(fp.open(fp.ReadOnly))
  {
  QTextStream ts(&amp;fp);
  while(!ts.atEnd())
  {
……



呃,“应用程序输出”里面没有打印我的数据啊,是不是读文本有问题啊~?
里面只有一句话:“D:\qt\workplace\read-build-desktop\debug\read.exe 启动中...”,没有数据呢~~
大神还在吗~?

#9


引用 5 楼  的回复:
仅供参考:

 
  
#include <QApplication>
#include <QtGui>
#include <QLabel>
#include <QFile>

int main(int argc,char *argv[])
{
QApplication app(argc,argv);

QFile file("111.txt"……



呃,这样只有一个对话框弹出来呢,label上没有显示数据啊~~

#10


引用 4 楼  的回复:
放到一个QTextEdit里面。直接写就好了。setText方法


呃,大神能说的更详细点么,我刚学Qt几天,好多基本的语句也不太会写呢~~呵呵

最好是用label显示,因为显示的时候只是给人看的,不需要再修改了~~

#11


引用 8 楼  的回复:
引用 7 楼  的回复:
#include <QDebug>

/*****************************************/
QFile fp("123.txt");
QVector<int> array;
if(fp.open(fp.ReadOnly))
{
QTextStream ts(&amp;amp;fp);
while(!ts.atEnd()……


有几个问题你注意下:
1、你的“123.txt”放在哪里?是放在你的工程目录下么?就是你放main.cpp的地方。
2、你的"123.txt"里面你写了些什么?如果全是数字 12 1212  这样的还好说。如果你写的有字母什么可能会出错,因为你这里用的QTextSteam而不是QDataSteam,textstream是专门读写文本的。
建议在代码上做这样的修改:
      QFile fp("123.txt");

    if(fp.open(fp.ReadOnly))
    {
    QTextStream ts(&fp);
    while(!ts.atEnd())
    {
    QString s;
    ts>>s;
    //********************************加上这一行:/
    qDebug()<<"数据:"<<s;

    }
    fp.close();
    } 

然后你再对得到的  QString进行操作得到你想要的值

#12


用QPlainTextEdit,专门用于大数据量的显示。

#13


呃~~谢谢大家了,前几天网络出了问题,一直没有来结贴~~

我后来把“123.txt”放到资源文件里就读出来了,已经搞定了~~谢谢各位大神了~~

#1


http://qimo601.iteye.com/blog/1470944
Qfile类来实现你的要求,楼主参考上面链接的内容,我想你就明白了,很简单的。

#2


引用 1 楼  的回复:
http://qimo601.iteye.com/blog/1470944
Qfile类来实现你的要求,楼主参考上面链接的内容,我想你就明白了,很简单的。


谢谢哦~~我先看看,不懂了再问~~

#3



class TestReadFile : public QWidget
{
Q_OBJECT

public:
TestReadFile() : QWidget()
{
treeWidget = new QTreeWidget(this);
treeWidget->setColumnCount(2);

QStringList strColumnTitle;
strColumnTitle.append(tr("时间"));
strColumnTitle.append(tr("吞吐量"));
treeWidget->setColumnWidth(0,80);
treeWidget->setColumnWidth(1,50);
treeWidget->setHeaderLabels(strColumnTitle);
treeWidget->setSelectionMode(QAbstractItemView::SingleSelection);

editFileName = new QPlainTextEdit(this);
editFileName->setMaximumWidth(50);
editFileName->setMaximumHeight(30);
btnDoProcess = new QPushButton(this);
btnDoProcess->setText(tr("读取"));
btnDoProcess->setMaximumWidth(50);

QVBoxLayout* layout = new QVBoxLayout(this);
layout->addWidget(editFileName);
layout->addWidget(btnDoProcess);
layout->addWidget(treeWidget);

connect(btnDoProcess,SIGNAL(clicked()),this,SLOT(doProcess()));

setLayout(layout);
}
~TestReadFile() {}
private slots:
void doProcess()
{
QString fileName  = QApplication::applicationDirPath() + "\\" + editFileName->toPlainText();
QFile fp(fileName);
QVector<float> valueArray;
if(fp.open(fp.ReadOnly))
{
QTextStream ts(&fp);
QString strLine = "";
QStringList NVPair;
bool bSuccess = false;
float fTime = 0.0f;
while(!ts.atEnd())
{
strLine = ts.readLine();
NVPair = strLine.split(":");
if (NVPair.size() != 2)
continue;
fTime = NVPair[1].toFloat(&bSuccess);
if (bSuccess)
{
QTreeWidgetItem* newItem = new QTreeWidgetItem(treeWidget, NVPair);
valueArray.append(fTime);
}
}
fp.close();
}
}

private:
QTreeWidget *treeWidget;
QPlainTextEdit *editFileName;
QPushButton *btnDoProcess;
};

拿到每一行自己用QString进行解析。
结果保存在valueArray中。

#4


放到一个QTextEdit里面。直接写就好了。setText方法

#5


仅供参考:

 

#include <QApplication>
#include <QtGui>
#include <QLabel>
#include <QFile>

int main(int argc,char *argv[])
{
QApplication app(argc,argv);

QFile file("111.txt");
QString aa;

file.open(QIODevice::ReadOnly);
aa=file.readLine();

QLabel *lable=new QLabel(aa);
lable->show();

file.close();
return app.exec();


}

#6


QFile 用这个类实现读数据。。剩下的就是分析和显示了!!

#7


#include <QDebug>

/*****************************************/
    QFile fp("123.txt");
    QVector<int> array;
    if(fp.open(fp.ReadOnly))
    {
      QTextStream ts(&fp);
      while(!ts.atEnd())
      {
      static int buf;
      ts>>buf;
     //********************************加上这一行:/
     qDebug()<<"数据:"<<buf;
      array.append(buf);
      }
      fp.close();
    }

代码这样修改后,运行下,到“应用程序输出”下面看结果

#8


引用 7 楼  的回复:
#include <QDebug>

/*****************************************/
  QFile fp("123.txt");
  QVector<int> array;
  if(fp.open(fp.ReadOnly))
  {
  QTextStream ts(&amp;fp);
  while(!ts.atEnd())
  {
……



呃,“应用程序输出”里面没有打印我的数据啊,是不是读文本有问题啊~?
里面只有一句话:“D:\qt\workplace\read-build-desktop\debug\read.exe 启动中...”,没有数据呢~~
大神还在吗~?

#9


引用 5 楼  的回复:
仅供参考:

 
  
#include <QApplication>
#include <QtGui>
#include <QLabel>
#include <QFile>

int main(int argc,char *argv[])
{
QApplication app(argc,argv);

QFile file("111.txt"……



呃,这样只有一个对话框弹出来呢,label上没有显示数据啊~~

#10


引用 4 楼  的回复:
放到一个QTextEdit里面。直接写就好了。setText方法


呃,大神能说的更详细点么,我刚学Qt几天,好多基本的语句也不太会写呢~~呵呵

最好是用label显示,因为显示的时候只是给人看的,不需要再修改了~~

#11


引用 8 楼  的回复:
引用 7 楼  的回复:
#include <QDebug>

/*****************************************/
QFile fp("123.txt");
QVector<int> array;
if(fp.open(fp.ReadOnly))
{
QTextStream ts(&amp;amp;fp);
while(!ts.atEnd()……


有几个问题你注意下:
1、你的“123.txt”放在哪里?是放在你的工程目录下么?就是你放main.cpp的地方。
2、你的"123.txt"里面你写了些什么?如果全是数字 12 1212  这样的还好说。如果你写的有字母什么可能会出错,因为你这里用的QTextSteam而不是QDataSteam,textstream是专门读写文本的。
建议在代码上做这样的修改:
      QFile fp("123.txt");

    if(fp.open(fp.ReadOnly))
    {
    QTextStream ts(&fp);
    while(!ts.atEnd())
    {
    QString s;
    ts>>s;
    //********************************加上这一行:/
    qDebug()<<"数据:"<<s;

    }
    fp.close();
    } 

然后你再对得到的  QString进行操作得到你想要的值

#12


用QPlainTextEdit,专门用于大数据量的显示。

#13


呃~~谢谢大家了,前几天网络出了问题,一直没有来结贴~~

我后来把“123.txt”放到资源文件里就读出来了,已经搞定了~~谢谢各位大神了~~