Pergunta

Eu estou baixando um arquivo usando QNetworkAccessManager :: get mas ao contrário QHttp :: get não há nenhum built-in maneira de escrever diretamente a resposta a uma QIODevice diferente.

A maneira mais fácil seria fazer algo como isto:

QIODevice* device;

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

e, em seguida, no slot newData:

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

Mas eu não tenho certeza se este é o caminho certo, talvez eu perdi alguma coisa.

Foi útil?

Solução

Isso parece corrigir. Gostaria de usar as formas de nível inferior de read() e write(), não os QByteArray, que não suportam adequadamente o tratamento de erros, mas diferente do que, ele parece estar bom.

Você está tendo problemas com ele?

Outras dicas

Melhor usar o sinal acabado de ler todo o conteúdo no final do processo de download. Um exemplo (remova o ciclo de eventos e usar um novo slot para torná-lo assíncrono):

    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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top