Scrittura di una QNetwork Rispondere a un file
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.
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;