QDataStream не может сериализовать данные

Я пытаюсь следовать этому уроку и сериализовать объекты Qt. Вот мой код:

QFile file("/Users/kaustav/Desktop/boo.dat");
if (!file.open(QIODevice::WriteOnly)) {
    qDebug() << "Cannot open file for writing: "
         << qPrintable(file.errorString()) << endl; //no error message gets printed
    return 0;
}
QDataStream out(&file);   // we will serialize the data into the file
out.setVersion(QDataStream::Qt_5_3); //adding this makes no difference
out << QString("the answer is");   // serialize a string
out << (qint32)42;

Когда я запускаю эту программу, файл все равно создается на моем рабочем столе, но его размер составляет 0 кБ, он пустой. Естественно, когда я тогда попробую это:

 QFile file("/Users/kaustav/Desktop/boo.dat");
 file.open(QIODevice::ReadOnly);
 QDataStream in(&file);    // read the data serialized from the file
 in.setVersion(QDataStream::Qt_5_3);
 QString str;
 qint32 w;
 in >> str >> w;

Я получаю пустую строку в str, Что я делаю неправильно? Если какая-либо помощь, я использую Qt Creator 3.1.1 основанный на Qt 5.2.1,

1 ответ

Решение

Проверьте, есть ли какие-либо ошибки, возвращаемые при вызове open, и убедитесь, что вы закрыли файл с помощью file.close(), когда закончите с ним.

Поскольку вы используете Qt 5, вам следует использовать QSaveFile вместо этого при сохранении данных.

Другие вопросы по тегам