13,009
回編集
(→概要) |
|||
1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
<br><br> | |||
== HTTPリクエスト / HTTPレスポンス (非同期) == | |||
==== 一定のタイミングで取得 ==== | |||
# ネットワークアクセスマネージャの設定 | |||
#: <code>QNetworkAccessManager</code>クラスを使用して、HTTPリクエストを送信して、HTTPレスポンスを受信する。 | |||
#: <code>QNetworkAccessManager</code>クラスは非同期で動作し、<code>QNetworkReply</code>クラスのオブジェクトを通じて結果を返す。 | |||
# タイマの設定 | |||
#: <code>QTimer</code>クラスを使用して、指定した間隔ごとにスロット(関数)を実行する。 | |||
#: このスロット内でHTTPリクエストを発行する。 | |||
# マルチスレッドの実装 | |||
#: Qtのマルチスレッド処理の方法はいくつか存在する。 | |||
#: しかし、<code>QNetworkAccessManager</code>クラス自身は非同期処理を行うため、マルチスレッドを明示的に扱う必要はない。 | |||
#: もし、ダウンロード処理のみを別のスレッドで行う場合は、<code>QThread</code>クラスまたは<code>QtConcurrent</code>クラスを使用して、その中で<code>QNetworkAccessManager</code>クラスのオブジェクトを作成および使用する。 | |||
<syntaxhighlight lang="c++"> | |||
#include <QCoreApplication> | |||
#include <QTimer> | |||
#include <QNetworkAccessManager> | |||
#include <QNetworkRequest> | |||
#include <QNetworkReply> | |||
#include <QObject> | |||
class Downloader : public QObject { | |||
Q_OBJECT | |||
private: | |||
QNetworkAccessManager m_Manager; | |||
QTimer m_Timer; | |||
public: | |||
Downloader() { | |||
connect(&m_Timer, &QTimer::timeout, this, &Downloader::startDownload); | |||
connect(&m_Manager, &QNetworkAccessManager::finished, this, &Downloader::downloadFinished); | |||
m_Timer.start(60000); // 1分ごと | |||
} | |||
private slots: | |||
void startDownload() { | |||
QUrl url("https://www.google.com"); | |||
QNetworkRequest request(url); | |||
m_Manager.get(request); | |||
} | |||
void downloadFinished(QNetworkReply *reply) { | |||
if (reply->error()) { | |||
qDebug() << "Download error:" << reply->errorString(); | |||
return; | |||
} | |||
QString data = reply->readAll(); | |||
qDebug() << data; | |||
} | |||
}; | |||
int main(int argc, char *argv[]) | |||
{ | |||
QCoreApplication a(argc, argv); | |||
Downloader downloader; | |||
return a.exec(); | |||
} | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||