4

Qtは初めてです。Qt for VS2008をインストールし、VS2010と統合しました。HTTPリクエストの作成方法を知りたいだけです。QtNetworkについて読みましたが、QtHttpは廃止されました。

libcurlcurlppについても知っていますが、インストールとQtでの動作に問題があります。

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

どうもありがとうございます。

4

2 に答える 2

6

libcurlcurlppは優れたライブラリですが、これらを使用すると、プロジェクトに依存関係が追加され、おそらく回避できます。

Qtの最近のバージョンではQNetworkAccessManager、ネットワーク要求(http要求を含む)の作成と応答の受信に使用することをお勧めします。

ファイルをダウンロードする最も簡単な方法は次のとおりです。

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

replyFinishedスロットが呼び出されると、パラメーターQNetworkReplyとして受け取るオブジェクトには、ダウンロードされたデータとメタデータ(ヘッダーなど)が含まれます。

より完全な例はQtの例にあります。ここで、そのソースコードを読むことができます。

于 2010-11-18T11:06:01.557 に答える
5

ジュゼッペは正しいです。libcurlcurlpp、および同様のライブラリを使用する必要はありません。その必要はありません。Qtには、それ自体でシンプルで実用的なクラスがあります。

リクエストの送信とレスポンスの取得の標準的な方法は非同期であることに注意してください。マネージャのfinished(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からQtCreatorIDEに切り替えることをお勧めします。優れたシミュレーターとモバイルデバイステスト用の完全なツールチェーンがあります。

于 2010-11-18T11:23:48.830 に答える