Запись QNetworkReply в файл - PullRequest
       11

Запись QNetworkReply в файл

10 голосов
/ 30 июля 2009

Я загружаю файл с помощью QNetworkAccessManager :: get, но в отличие от QHttp :: get, нет встроенного способа прямой записи ответа в другой QIODevice.

Самый простой способ - сделать что-то вроде этого:

QIODevice* device;

QNetworkReply* reply = manager.get(url);
connect(reply, SIGNAL(readyRead()), this, SLOT(newData()));

и затем в слоте newData:

device->write(reply->readAll());

Но я не уверен, что это правильный путь, может быть, я что-то упустил.

Ответы [ 2 ]

7 голосов
/ 30 июля 2009

Это выглядит правильно. Я бы использовал низкоуровневые формы read() и write(), а не QByteArray, которые не поддерживают обработку ошибок должным образом, но в остальном все выглядит хорошо.

У вас проблемы с этим?

0 голосов
/ 30 июля 2009

Лучше использовать готовый сигнал, чтобы прочитать все содержимое в конце процесса загрузки. Пример (удалите цикл событий и используйте новый слот, чтобы сделать его асинхронным):

    QNetworkAccessManager manager;
    QEventLoop loop;
    QNetworkReply *reply = manager.get( request );
    QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));

    loop.exec();

    QFile file( "YOUR FILE" );
    file.open(QIODevice::WriteOnly);
    file.write(reply->readAll());

    delete reply;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...