Qtをやってみる

半年くらい前に一度触りかけて、以後ずっと放置していたQtをもう一度やってみようかと思いました。

自作OSは諦めたんじゃないんだからね!
そっちは、一昨日「はじめて読む486」を注文したので、
届けばきっと大丈夫(俺の思考回路がついていけば
QtはNokiaが開発・提供しているGUIツールキットの一種です。
言わずもがな、GUIツールキットとはGUIアプリケーションを使うためのライブラリ/API群、
もしくはそれらのラッパーです。
GUIツールキットには山ほど種類がありますが…

<Windows>
・Windows API
・MFC

Mac OS
・Carbon
・Cocoa

Unix…というかクロスプラットフォーム
X11
・Xaw
・GTK+
wxWidgets
・Tk

といった具合に、たくさんございます。

ではQtはどのような特徴があるのかというと、


クロスプラットフォーム
・メイン言語はC++
・シグナルとスロット
PC/AT互換機以外のデバイスもいくつかサポート

といったあたりでしょうか。
クロスプラットフォームに関しては説明は不要でしょう。
主にはC++向けに提供されています。PythonRubyなどでも使えた気が。
また、Symbianを始めとするモバイルデバイスでの開発にも使えます。
ここは流石Nokiaさんというところ。


最後、シグナルとスロット。

GUIプログラミングにおいて、CUIと最も異なるのが、入力です。
CUIではコマンドラインからの文字入力しかありません。(一般的には
ところが、GUIではマウスで左クリックしたり右クリックしたりダブルクリックしたり…
監視すればいいのはEnterキーだけで済むどころじゃありません。

そのため、イベントドリブン方式をとるのが一般的なようです。
何かクリックやキー押下のようなイベントが発生したら、逐次処理を実行する感じです。

イベントが発生すると、OSがアプリケーションの用意したコールバック関数を呼びます。
コールバック関数が、起こったイベントに対してそれぞれの処理を行います。

これには、OSに対してコールバック関数を登録しなくてはなりません。

ところが、Qtは他のGUIツールキットと違って、こうなります。

どういうことかというと、起こったイベントがアプリケーション内で「シグナル」として
準備されています。OSはこのシグナルを呼ぶようになっています。

そして、自分でシグナルをアプリケーションの「スロット」につなげます。
スロットにはイベントが起こったときに行われる好きな処理が記述できます。
設計をこうすることで保守性があがります。

ちなみに、シグナルとスロットは、クラスメソッドです。


このように、QtはC++オブジェクト指向を思う存分活かしたプログラミングが
可能になります。

しかし、ひとつだけ問題があります。日本語情報が少ないという事です。

仕方ないので英語を読んで勉強します…。
まあ、一般的に技術解説の英語は外国人も読むことが想定されているので、
母国語を英語としない人でも簡単に読めるようになっている(?)らしいので、
ゆっくりトライしたいと思います。

とりあえずはここを参考にしていこう。