Écrire un QNetworkReply dans un fichier
Question
Je télécharge un fichier à l'aide de QNetworkAccessManager :: get, mais contrairement à QHttp :: get, il n'y a pas de méthode intégrée pour écrire directement la réponse sur un autre QIODevice.
Le moyen le plus simple serait de faire quelque chose comme ceci:
QIODevice* device;
QNetworkReply* reply = manager.get(url);
connect(reply, SIGNAL(readyRead()), this, SLOT(newData()));
puis dans l'emplacement newData:
device->write(reply->readAll());
Mais je ne suis pas sûr que ce soit la bonne façon, j'ai peut-être oublié quelque chose.
La solution
Cela semble correct. J'utiliserais les formes de niveau inférieur read ()
et write ()
, pas celles QByteArray
, qui ne prennent pas correctement en charge le traitement des erreurs , mais à part ça, ça a l'air bien.
Avez-vous des problèmes avec cela?
Autres conseils
Utilisez le signal final pour lire tout le contenu à la fin du processus de téléchargement. Un exemple (supprimez la boucle d'événement et utilisez un nouvel emplacement pour le rendre asynchrone):
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;