Qt Tech. OpenSSL通信、HTTPS通信を行うプログラムが簡単じゃない!対処方法 新しいページはコチラ
提供: yonewiki
(→本題) |
(→本題) |
||
| 138行: | 138行: | ||
<syntaxhighlight2 lang="cpp"> | <syntaxhighlight2 lang="cpp"> | ||
true | true | ||
| + | </syntaxhighlight2> | ||
| + | |||
| + | |||
| + | とくに、SSL通信をするための準備をする必要も無くQNetworkAccessManageクラスだけで通信できるようになります。 | ||
| + | |||
| + | |||
| + | 簡単なプログラムの流れは以下になると思います。 | ||
| + | |||
| + | |||
| + | <syntaxhighlight2 lang="Cpp"> | ||
| + | void CqApp::Init() //CqApp は QObject を継承したQtの機能的クラスの派生クラス(QSystemTrayIcon,QPlainTextEdit,とか | ||
| + | //QNetworkAccessMangeの機能を使う以上は引数thisポインタが必要なので | ||
| + | //QObjectから派生しているクラスである必要がある。 | ||
| + | { | ||
| + | //ここでのInitメンバ関数は初期化とかコンストラクタのような処理 | ||
| + | qNetworkAcessManager_Data = new QNetworkAccessManager(this); | ||
| + | //QNetworkAccessManagerクラスのオブジェクトを生成します。左辺は自分で決めていいです。任意でどうぞ。 | ||
| + | //QNetworkAccessManager* qNetworkAcessManager_Data;のようなメンバ変数としての宣言が事前に必要です。 | ||
| + | … | ||
| + | |||
| + | connect(qNetworkAcessManager_Data, SIGNAL(finished(QNetworkReply*)), | ||
| + | this, SLOT(readData(QNetworkReply*))); | ||
| + | |||
| + | //こんな感じでQt独特のシグナルとスロットという考え方の関数で | ||
| + | //qNetworkAcessManager_Dataのfinishedという通知(引数は内部的にQNetworkRply*型)を受け取ると | ||
| + | //このクラスのreadDataメンバ関数を(内部的にQNetworkRply*型を引数として)呼び出すことを宣言します。 | ||
| + | //イベント駆動のやり方です。 | ||
| + | |||
| + | this::request(); | ||
| + | … | ||
| + | } | ||
| + | … | ||
| + | void CqApp::request() | ||
| + | { | ||
| + | … | ||
| + | qNetworkAcessManager_Data->get( QNetworkRequest(QUrl(QStringLiteral("https://xxx.xx/data.xml")))); | ||
| + | //メンバ変数を利用してget関数に指定したアドレスの内容を読み込みます。 | ||
| + | //通信が終わったらシグナルスロットの仕組みによりthis::readData関数が呼び出されます。 | ||
| + | … | ||
| + | } | ||
| + | void CqApp::readData(QNetworkReply *qNetworkReply_Reply) | ||
| + | { | ||
| + | if(qNetworkReply_Reply->error() != QNetworkReply::NoError) { | ||
| + | // SSL通信エラーが発生した時の処理 | ||
| + | } | ||
| + | else{ | ||
| + | // 通信成功時の処理 | ||
| + | } | ||
| + | … | ||
| + | } | ||
</syntaxhighlight2> | </syntaxhighlight2> | ||