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.

Était-ce utile?

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top