2010-11-18 10 views
4

私はQtに新規参加しています。 VS2008のQtをインストールし、VS2010と統合しました。 HTTPリクエストの作成方法を知りたいだけです。私はQtNetworkについて読んだが、QtHttpはobseleteである。QtでのHTTPリクエストの作成

私はまた、約libcurlのcurlppを知っているが、私は問題、それをインストールし、それはQtので動作することがあります。

何をお勧めしますか?QtNetworkまたはcurlppQtNetworkの場合は、サンプル関数またはコード(および使用するクラス)を教えてください。 curlpp(libcurl)の場合は、Qt(または親切に説明してください)のインストール手順をどこから見つけることができますか?

ありがとうございました。

答えて

6

libcurlのcurlppは偉大なライブラリですが、それらを使用することは、おそらくあなたが避けることができ、プロジェクトへの依存関係を追加します。

Qtの最近のバージョンでは、ネットワークリクエスト(httpリクエストを含む)を行い、返信を受け取るためにQNetworkAccessManagerを使用することをお勧めします。

ファイルをダウンロードするための最も簡単な方法は次のとおりです。replyFinishedスロットが呼び出されると、それはパラメータとして取ることQNetworkReplyオブジェクトは、ヘッダ(ダウンロードしたデータなどのメタデータを

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

含まれています、等。)。

より完全な例はQtの例で見つけることができます。read here its source codeです。

5

ジュゼッペは右である、あなたはlibcurlをcurlppと同様のライブラリを使用する必要はありません。 その必要はありません.Qtはそれ自身でシンプルで働きやすいクラスを持っています。

リクエストの送信と返信の標準的な方法は非同期であることに注意してください。 常にマネージャの終了(QNetworkReply *)信号をスロットに接続する必要があります。

複数のリクエストを送信し、返信ごとにスロットを追加したくない場合は、常にイベントループを実行し、マネージャの信号をイベントループquit()スロットに接続できます。このような

何か:ところで

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 

。何をしているのか分かりません。しかし、そのモバイルアプリケーションの場合は、VSからQtCreator IDEに切り替えることをお勧めします。モバイルデバイスのテストに最適なシミュレータとツールチェーンを備えています。