Как я могу прочитать текстовый файл по строкам в Qt?
Я ищу эквивалент Qt:
std::ifstream infile;
std::string line;
while (std::getline(infile, line))
{
...
}
Как я могу прочитать текстовый файл по строкам в Qt?
Я ищу эквивалент Qt:
std::ifstream infile;
std::string line;
while (std::getline(infile, line))
{
...
}
Используйте этот код:
QFile inputFile(fileName);
if (inputFile.open(QIODevice::ReadOnly))
{
QTextStream in(&inputFile);
while (!in.atEnd())
{
QString line = in.readLine();
...
}
inputFile.close();
}
Вы можете использовать QFile:: readAll(), см. http://doc.qt.io/qt-5/qiodevice.html#readAll
И затем используйте конструктор QString, который принимает QByteArray, см. http://doc.qt.io/qt-5/qstring.html#QString-9
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();
};
Так как Qt 5.5 вы можете использовать QTextStream::readLineInto
. Он ведет себя аналогично std::getline
и, возможно, быстрее, чем QTextStream::readLine
, потому что он повторно использует строку:
QIODevice* device;
QTextStream in(&device);
QString line;
while (in.readLineInto(&line)) {
// ...
}
Вот пример из моего кода. Поэтому я прочитаю текст с 1-й строки до 3-й строки, используя readLine(), а затем сохраню переменную массива и напечатаю в текстовое поле, используя for-loop:
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]);
}