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> | ||