Вопрос

Я загружаю файл с помощью 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top