Frage

Ich bin neu auf Qt . Ich installierte Qt für VS2008 und integriert mit meinem VS2010 . Ich will nur wissen, wie HTTP-Anforderungen zu machen. Ich habe gelesen, über QtNetwork , aber QtHttp ist obselete.

Ich weiß auch über Libcurl und curlpp , aber ich habe Probleme bei der Installation es, und macht es mit Qt arbeiten.

Was empfehlen Sie, QtNetwork oder curlpp ? Wenn QtNetwork , können Sie bitte geben Sie mir eine Beispielfunktion oder ein Stück Code (und welche Klasse zu verwenden). Wenn curlpp (Libcurl) , können Sie mir bitte Punkt irgendwo, wo ich die Schritte, die sie für die Installation finden Sie Qt (oder gefälligst erklären)?

Vielen Dank.

War es hilfreich?

Lösung

Libcurl und curlpp sind große Bibliotheken, aber sie fügt eine Abhängigkeit zu einem Projekt mit, dass wahrscheinlich können Sie vermeiden.

Neuere Versionen von Qt empfehlen QNetworkAccessManager auf Netzwerkanforderungen zu machen ( hTTP-Anfragen enthalten) und erhalten Antworten.

Die einfachste Möglichkeit, eine Datei herunterzuladen ist:

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

Wenn der replyFinished Schlitz genannt wird, das QNetworkReply Objekt, das es braucht, als Parameter werden die heruntergeladenen Daten sowie Meta-Daten enthalten (Header, usw.).

Ein vollständigeres Beispiel in den Qt Beispiele zu finden, können Sie lesen hier seinen Quellcode .

Andere Tipps

Giuseppe richtig ist, müssen Sie nicht verwenden müssen Libcurl curlpp und ähnliche Bibliotheken. Es besteht keine Notwendigkeit dafür, Qt eine einfache und Arbeiterklasse hat auf sie besitzen.

Beachten Sie, dass der normale Weg Anfrage zu senden und die Antwort Abrufen asynchron ist. Sie haben immer die Manager beendet (QNetworkReply *) Signal an einen Schlitz zu verbinden.

Wenn Sie mehrere Anfragen senden und wollen keinen Schlitz für jede Antwort hinzufügen möchten, können Sie immer eine Ereignisschleife laufen, und schließen Sie die Manager Ereignisschleifen Signal beenden () benutzt.

So etwas wie folgt aus:

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. nicht wissen, was Sie tun. Aber wenn es ein Handy-App, würde ich empfehlen Sie von VS zu QtCreator IDE wechseln. Es hat einen schönen Simulator und eine komplette Werkzeugkette für mobile Gerätetests.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top