Question

Je suis nouveau à Qt . J'ai installé Qt pour VS2008 et intégré avec mon VS2010 . Je veux juste savoir comment faire des requêtes HTTP. Je l'ai lu sur QtNetwork mais QtHttp est obselete.

Je sais aussi sur libcurl et curlpp , mais j'ai des problèmes d'installation, et le faire fonctionner avec Qt.

Que recommandez-vous, QtNetwork ou curlpp ? Si QtNetwork , pouvez-vous s'il vous plaît me donner un exemple de fonction ou un morceau de code (et quelle classe à utiliser). Si curlpp (libcurl) , pouvez-vous s'il vous plaît me pointer vers un endroit où je peux trouver les étapes pour l'installer pour Qt (ou de bien vouloir expliquer)?

Merci beaucoup.

Était-ce utile?

La solution

libcurl et curlpp sont grandes bibliothèques, mais en utilisant les ajoute une dépendance à votre projet que vous pouvez probablement éviter.

Les versions récentes de Qt recommandent d'utiliser QNetworkAccessManager pour faire des demandes de réseau ( inclus les requêtes HTTP) et recevoir des réponses.

La façon la plus simple possible de télécharger un fichier est:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://stackoverflow.com")));

Lorsque la fente de replyFinished est appelée, l'objet QNetworkReply qu'il prend en tant que paramètre contiendra les données téléchargées, ainsi que les méta-données (en-têtes, etc.).

Un exemple plus complet se trouve dans les exemples Qt, vous pouvez lire ici son code source .

Autres conseils

Giuseppe est juste, vous n'avez pas besoin d'utiliser libcurl , curlpp et bibliothèques similaires. Il n'y a pas besoin pour cela, Qt est simple et la classe ouvrière sur son propre.

Gardez à l'esprit que la manière standard d'envoyer la demande et la récupération de réponse est asynchrone. Vous devez toujours connecter le gestionnaire fini signal (QNetworkReply *) à un emplacement.

Si vous envoyez des demandes multiples et ne voulez pas ajouter une fente pour chaque réponse, vous pouvez toujours exécuter une boucle d'événements, et connecter les gestionnaires signalent aux boucles d'événements fente quit ().

Quelque chose comme ceci:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QEventLoop *eventLoop = new QEventLoop();
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), eventLoop, SLOT(quit());

manager->get(QNetworkRequest(QUrl("http://stackoverflow.com")));
eventLoop->exec(QEventLoop::ExcludeUserInputEvents);

QByteArray replyData = reply->readAll();
... //do what you want with the data your receive from reply

BTW. ne sais pas ce que vous faites. Mais si son d'une application mobile, je vous recommande de passer de VS à QtCreator IDE. Il a un simulateur agréable et un ensemble d'outils complet pour les tests de l'appareil mobile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top