Domanda

Sto scaricando un file usando QNetworkAccessManager :: get ma a differenza di QHttp :: get non esiste un modo integrato per scrivere direttamente la risposta su un QIODevice diverso.

Il modo più semplice sarebbe quello di fare qualcosa del genere:

QIODevice* device;

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

e quindi nello slot newData:

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

Ma non sono sicuro che sia la strada giusta, forse mi sono perso qualcosa.

È stato utile?

Soluzione

Sembra corretto. Vorrei utilizzare le forme di livello inferiore di read () e write () , non quelle QByteArray , che non supportano correttamente la gestione degli errori , ma a parte questo, sembra a posto.

Stai riscontrando problemi?

Altri suggerimenti

Meglio usare il segnale finito per leggere tutto il contenuto alla fine del processo di download. Un esempio (rimuovere il loop degli eventi e utilizzare un nuovo slot per renderlo asincrono):

    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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top