Pregunta

Estoy descargando un archivo usando QNetworkAccessManager :: get pero a diferencia de QHttp :: get, no hay una forma integrada de escribir directamente la respuesta en un dispositivo QIOD diferente.

La forma más fácil sería hacer algo como esto:

QIODevice* device;

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

y luego en la nueva ranura de datos:

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

Pero no estoy seguro de si esta es la forma correcta, tal vez me haya perdido algo.

¿Fue útil?

Solución

Eso se ve correcto. Usaría las formas de nivel inferior de read () y write () , no las QByteArray , que no admiten el manejo de errores , pero aparte de eso, se ve bien.

¿Tiene problemas con él?

Otros consejos

Utilice mejor la señal final para leer todos los contenidos al final del proceso de descarga. Un ejemplo (eliminar el bucle de eventos y usar una nueva ranura para hacerlo así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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top