カテゴリ:
今月のはじめに学校で外部の人が来て講義をしてくださる特別講義というものがありました。

主な講義内容は、
・オブジェクト指向
・デザインパターン
・Qtプログラミング
・テスト駆動開発
・アジャイル開発
の話をしてくださいました。
今回は、その中の 「Qtプログラミング」について簡単にまとめてみました!

使ったことない人は試してみて!という感じの記事です。

続きから 

Qtとは?


Qtとは非常に優れたC++のクラスライブリ・GUIフレームワークです。マルチプラットフォームなので1度書いてしまえば、1つのソースプロジェクトでアプリを作成できます。そしてこのフレームワークはオープンソースなのです!!
公式ページはこちら:http://www.qt.io

02

フレームワークとは?


アプリケーションの作成を簡易化するための仕組みをまとめ、再利用可能な形でパッケージして提供されているものです。

Qtの使い方と始め方


Qtのダウンロードは上記のURLより「Get started」をクリックしてもらえればダウンロードページが表示されます。
今回はそのオープンソース版を用います。(ページの下の方)
18

ダウンロードURL:http://www.qt.io/download-open-source/

Qtをインストールすると一緒に導入されるIDEアプリ「Qt Creator」をこの講義では用いていました。
プロジェクトを作成してコードを書き始める事ができます。
11

主なクラス


・Qwidjet・・・ウィンドウガジェットを表示・作成するためのクラス
・QPushButton・・・クリックイベントを発生させるためなどに使うボタンを表示・作成するためのクラス
・QLineEdit・・・値を入力および表示するために使うテキストボックスを表示・作成するためのクラス
・QVboxLayout・・・レイアウトを行うためのクラス
・QGridLayout・・・レウアウトを格子系で行うためのクラス。(0,0)や(1,0),(0,1)など、座標を指定して簡単にコンポーネントを配置することができる。

SIGNALとSLOT


SIGNAL(クリックなどのイベント)とSLOT(イベント発生時の処理系)はconnect()関数を用いて接続を行う。
処理を呼ぶのはフレームワーク側で呼び出されるのはアプリケーション側

45

マウスイベントとペイントイベント


Qwidjet
virtual mousePressEvent ←マウスイベント(画面上のクリック)を取得する
virtual paintEvent ←ペイントイベントを行う
↑継承
My Widjet
mousePressEvent
paintEvent

イベントの情報更新による画面更新は、イベントごとにupdate()で行う。
今回の指定はこれをpress,move,releaseイベントごとに行うことで実現していた。

ベースクラスとサブクラスの継承関係によるポインタの代入について


Aクラスがありこれを継承して、Bクラスを定義した場合、Bクラスから作ったポインタにAクラスからできるポインタを代入することは通常できない。
04
A *ap = new A;
B *bp = new B; 
A *ap2 = ap; ◯
A *ap3 = bp; ◯
B *bp2 = ap3;  ✕

[解決策]
ベースクラスがサブクラスの継承元であることをプログラマが保証することで明示的にキャストとして記述することで代入が行える。

B *bp2 = global_cast<B *>(ap3);


てなかんじです。
もっと勉強したい人は書籍を購入してみることをおすすめします。定番はオライリー本ですね。