在Qt中逐行读取文本文件

问题描述 投票:35回答:5

如何在Qt中逐行读取文本文件?

我正在寻找相当于的Qt:

std::ifstream infile;
std::string line;
while (std::getline(infile, line))
{
   ...
}
c++ qt
5个回答
84
投票

使用此代码:

QFile inputFile(fileName);
if (inputFile.open(QIODevice::ReadOnly))
{
   QTextStream in(&inputFile);
   while (!in.atEnd())
   {
      QString line = in.readLine();
      ...
   }
   inputFile.close();
}

1
投票

你可以使用QFile :: readAll(),参见http://doc.qt.io/qt-5/qiodevice.html#readAll

然后使用带有QByteArray的QString构造函数,请参阅http://doc.qt.io/qt-5/qstring.html#QString-9


1
投票
QFile inputFile(QString("/path/to/file"));
inputFile.open(QIODevice::ReadOnly);
if (!inputFile.isOpen())
    return;

QTextStream stream(&inputFile);
QString line = stream.readLine();
while (!line.isNull()) {
    /* process information */

    line = stream.readLine();
};

0
投票

从Qt 5.5开始,你可以使用QTextStream::readLineInto。它的行为类似于std::getline,并且可能比QTextStream::readLine更快,因为它重用了字符串:

QIODevice* device;
QTextStream in(&device);

QString line;
while (in.readLineInto(&line)) {
  // ...
}

-2
投票

这是我的代码中的示例。所以我将使用readLine()读取从第1行到第3行的文本,然后存储到数组变量并使用for循环打印到textfield:

QFile file("file.txt");

    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    QTextStream in(&file);
    QString line[3] = in.readLine();
    for(int i=0; i<3; i++)
    {
        ui->textEdit->append(line[i]);
    }
© www.soinside.com 2019 - 2024. All rights reserved.