Schreibe eine QNetworkReply in eine Datei
Frage
Ich bin das Herunterladen einer Datei QNetworkAccessManager mit :: bekommen, aber im Gegensatz zu QHttp :: get gibt es keine integrierte Möglichkeit, direkt die Antwort auf einen anderen QIODevice zu schreiben.
Der einfachste Weg wäre, so etwas zu tun:
QIODevice* device;
QNetworkReply* reply = manager.get(url);
connect(reply, SIGNAL(readyRead()), this, SLOT(newData()));
und dann in newData Slot:
device->write(reply->readAll());
Aber ich bin nicht sicher, ob dies der richtige Weg ist, vielleicht habe ich etwas verpasst.
Lösung
Das sieht richtig. Ich würde die untergeordneten Formen der read()
und write()
verwendet, nicht die QByteArray
diejenigen, die nicht richtig Fehlerbehandlung unterstützen, aber anders als das, es sieht gut aus.
Haben Sie Probleme damit?
Andere Tipps
Besser das fertige Signal verwenden, um alle Inhalte am Ende des Download-Prozesses zu lesen. Ein Beispiel (die Ereignisschleife entfernen und einen neuen Schlitz verwenden, um es asynchron):
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;