Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QString и QDataStream
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
Hardcode
Имею небольшое приложение, в котором хотелось бы иметь возможность при запуске считывать некоторые данные из бинарного файла, который, естественно, нужно заранее создать. Однако у меня никак не получается отправить в QDataStream строку QStream. Причем проблему я заметил только с QString: например, QPixmap записывается и считывается без проблем.

Создал новый тест-проект, вот код:
#include <QApplication>
#include <QFile>
#include <QDataStream>
#include <QString>
#include <QDebug>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    QFile output("output.bin");
    output.open(QIODevice::WriteOnly);

    QDataStream fileStream(&output);
    fileStream.setVersion(QDataStream::Qt_4_7);
    fileStream << QString("Test string");

    if (fileStream.status() != QDataStream::Ok)
        qDebug() << "Error while writing file";

    return app.exec();
}


Результат работы программы - файл output.bin размером 0 байт. Сообщения об ошибке не возникало.
Кто-нибудь сталкивался с подобным? Или, может быть, в коде что-то упущено?

Система: Linux x86_64, GCC 4.6.0, Qt 4.7.2
PAFOS
Попробуй так:
    QDataStream fileStream(&output);
    fileStream.setVersion(QDataStream::Qt_4_7);
    fileStream << QString("Test string");

    if (fileStream.status() != QDataStream::Ok)
        qDebug() << "Error while writing file";

    fileStream.flush();
    output.close();
abc
во-первых, как ты завершаешь своё приложение?
я сунул твой код в конструктор окна, и код отработал.
я скомпилировал твой код, как он есть, и строка не записалась.
затем я добавил - output.close();
запись произошла.
почему? мне приходит в голову, что в первом случае (код в конструкторе класса) по выходе из конструктора объект QFile output удаляется, предварительно закрывая файл - изменения вносятся.
А во втором случае твоя программа не завершается, QFile output нигде не удаляется, файл остаётся открытым, изменения не вносятся
Hardcode
Да, действительно, проблема исчезла после вызова output.close().

Цитата(abc @ 4.4.2011, 11:39) *
как ты завершаешь своё приложение?

В этом-то и дело. Завершал из консоли по Ctrl+C, забыв, что в этом случае деструктор не будет вызван и буфер не сохранится на диске.
Но ведь, что самое интересное, абсолютно тот же подход у меня работал в случае QPixmap ^_^
Вопрос решен, спасибо за советы :)
abc
да, правда, при завершении программы QPixmap записывается
объяснить не могу :sad2:
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.