Qt — QTextStream — Как установить позицию курсора в начале строки?

После readLine()Как установить позицию курсора в начале строки?

С помощью seek() а также pos() не работает для меня

Вот как выглядит мой file.txt:

Object1 Some-name 2 3.40 1.50

Object2 Some-name 2 3.40 1.50 3.25

Object3 Some-name 2 3.40 1.50

Вот мой код:

QFile file("file.txt");
if(file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QTextStream stream(&file);

while(!stream.atEnd()) {
qint64 posBefore = file.pos();
QString line = stream.readLine();
QStringList splitline = line.split(" ");

if(splitline.at(0) == "Object1") {
stream.seek(posBefore);
object1 tmp;
stream >> tmp;
tab.push_back(tmp);
}

if(splitline.at(0) == "Object2") {
stream.seek(posBefore);
object2 tmp;
stream >> tmp;
tab.push_back(tmp);
}

if(splitline.at(0) == "Object3") {
stream.seek(posBefore);
object3 tmp;
stream >> tmp;
tab.push_back(tmp);
}

}
file.close();
}

0

Решение

Итак, вам нужно (Де) сериализации.

Попробуйте сделать это правильно.
Вот официальная документация: http://qt-project.org/doc/qt-4.8/datastreamformat.html
Вот пример: Сериализация с Qt

1

Другие решения

Я сделал для вас простое консольное приложение. Все, что вам нужно сделать, это старый добрый QString::split() по пробелам и возьмите первый элемент в строке, как вам нравится, я сделал это через QString::section() метод.

Ну вот код для main.cpp:

#include <QtCore/QCoreApplication>
#include <QFile>
#include <QStringList>
#include <QDebug>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

QFile f("file.txt");
f.open(QIODevice::ReadOnly);
// next line reads all file, splits it by newline character and iterates through it
foreach (QString i,QString(f.readAll()).split(QRegExp("[\r\n]"),QString::SkipEmptyParts)){
QString name=i.section(" ",0,0);
// we take first section of string from the file, all strings are stored in "i" variable
qDebug()<<"read new object - "<<name;
}
f.close();
return a.exec();
}

Файл file.txt находится в том же каталоге, что и исполняемый файл, и является копией вашего файла:

Object1 Some-name 2 3.40 1.50

Object2 Some-name 2 3.40 1.50 3.25

Object3 Some-name 2 3.40 1.50
0

По вопросам рекламы [email protected]