如何在Qt中逐行阅读文本文件?
我正在寻找相当于的Qt:
std::ifstream infile;
std::string line;
while (std::getline(infile, line))
{
...
}
答案 0 :(得分:84)
使用此代码:
QFile inputFile(fileName);
if (inputFile.open(QIODevice::ReadOnly))
{
QTextStream in(&inputFile);
while (!in.atEnd())
{
QString line = in.readLine();
...
}
inputFile.close();
}
答案 1 :(得分:1)
您可以使用QFile :: readAll(),请参阅http://doc.qt.io/qt-5/qiodevice.html#readAll
然后使用带有QByteArray的QString构造函数,请参阅http://doc.qt.io/qt-5/qstring.html#QString-9
答案 2 :(得分: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();
};
答案 3 :(得分:0)
从Qt 5.5起,您可以使用QTextStream::readLineInto
。它的行为类似于std::getline
,可能比QTextStream::readLine
更快,因为它重用了字符串:
QIODevice* device;
QTextStream in(&device);
QString line;
while (in.readLineInto(&line)) {
// ...
}
答案 4 :(得分:-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]);
}