Вопрос
Я загружаю файл с помощью QNetworkAccessManager :: get, но, в отличие от QHttp :: get, нет встроенного способа прямой записи ответа в другой QIODevice.
Самый простой способ - сделать что-то вроде этого:
QIODevice* device;
QNetworkReply* reply = manager.get(url);
connect(reply, SIGNAL(readyRead()), this, SLOT(newData()));
, а затем в слоте newData:
device->write(reply->readAll());
Но я не уверен, что это правильный путь, может быть, я что-то пропустил.
Решение
Это выглядит правильно. Я бы использовал формы read ()
и write ()
более низкого уровня, а не QByteArray
, которые должным образом не поддерживают обработку ошибок , но кроме этого, это выглядит хорошо.
У вас есть проблемы с этим?
Другие советы
Лучше использовать готовый сигнал, чтобы прочитать все содержимое в конце процесса загрузки. Пример (удалите цикл событий и используйте новый слот, чтобы сделать его асинхронным):
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;