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.

War es hilfreich?

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top