本特集の目的と目標
Qtは,ノルウェーのTrolltechにより開発されているクロスプラットフォーム向けGUIアプリケーション開発のフレームワークです。この特集では,Qtで実際にプログラミングするための基本的なノウハウとヒントについてお届けします。
Qtの多様な機能の中から4.4で追加されたQtWebKitの基本的活用方法など,デスクトップと組込みのアプリケーションに携わる現代プログラマに必須の内容を中心にお届けする予定です。
今回は,Qtの概要と最新バージョン4.4の機能と来年初頭の4.5の予定機能について説明します。
Qtとは?
Qtはデスクトップと組込み開発向けのクロスプラットフォームアプリケーション開発フレームワークです。直感的でわかりやすいAPIが特徴で,700を越える多様なクラスからなるC++クラスライブラリとGUI開発ツールで構成されています。開発言語はC++で,デスクトップではJava言語バインディングQt JambiがありJavaも開発に使えます。また,組込みLinuxプラットフォームでは,消費者製品やモバイル機器向けの機能を拡充したQtopiaがあります。
デスクトップ向けにWindows,UNIX/Linux X11,Mac OS Xのプラットフォームがサポートされ,組込み向けに組込みLinuxとWindows CEがサポートされています。クラスライブラリとGUI開発ツールは,どのプラットフォームについても商用版とGPLのオープンソース版が用意されており,製品開発にもオープソースアプリケーション開発にも幅広く使われています。
表1 Qtが使われているアプリケーション
| 分野 | アプリケーション |
|---|---|
| デスクトップ | KDE |
| Google Earth | |
| Adobe Photoshop Element | |
| Last FM | |
| Sun xVM VirualBox | |
| Skype | |
| Operaのブラウザ | |
| QCad | |
| 組込み | PDA,複合機,写真注文端末,医療機器,計測器,携帯電話など主に商用製品。 オープンソースでは,スマートフォーンプラットフォームOpenMoko |
| ツール/ライブラリ | Doxygen |
| PyQt | |
| QtRuby | |
| QicsTable | |
| KD CHART/TOOLS/GANNT/ REPORTS | |
| Qwt | |
| サードパーティ製品 | Qtアプリケーション自動テストツールSquish/Qt |
Qtの歴史─それは,公園のベンチから始まった
Qtの開発
1990年。当時のWindows,UNIX,MacのGUIツールキットは非常に使い難い上に,難解なAPIでした。またクロスプラットフォームツールキットはありましたが,どれも機能は貧弱で価格は高いものでした。Haavard NordとEirik Chambe-Engは公園のベンチで話し合い,機能が優れ使いやすいクロスプラットフォームツールキットを独自に作ろうと決心します。
1994年。二人はTrolltechを設立し,Qtの開発に着手しました。目標は,既存のどのGUIツールキットよりも機能が優り,わかりやすく,そして使い易いクロスプラットフォームGUIツールキットの実現です。
1996年。WindowsとUNIX/Linux X11をサポートした最初のバージョン1.0をリリース。その後2.0が1999年,3.0が2001年,そしてアーキテクチャを一新した4.0が2005年6月にリリースされました。
2008年。WebKit統合化とPhononマルチメディアフレームワークを中心とする,Qt 4シリーズ中で最大の機能追加がされた4.4がリリース。これが今回の連載で焦点としているリリースです。
Qtのライセンス
Qtは最初のリリースから商用版とオープンソース版の両ライセンスでリリースされました。しかし,Windowsではオープンソース版がない,オープソースライセンスもソースの改変ができないなどといったライセンス上の大きな問題を抱えていました。Qt 4からはすべてのプラットフォームでQtがオープンソースでも利用できるようになりました。そして,ライセンスの問題をめぐる中でKDE Free Qt Foundationが設立され,Trolltechが何らかの理由で定期的に新しいバージョンのQtをリリースしなかった場合には,KDE Free QtFoundationによりQtのオープンソースでの開発が保証されることになっています。
Qtの機能概要
Qtのアーキテクチャ
QtはGUIを中心として,データベース,XML,ネットワーク,OpenGL,マルチスレッドなどのGUIアプリケーションで一般的に使われる機能を取り込んだクロスプラットフォームC++アプリケーションフレームワークです。ウィジェットのレイアウト機能やUCS2(サロゲートペアも)を内部コードとし,種々の文字コーデックをサポートする国際化機能も備わっています。
QtではGUIエミュレーション,つまり各プラットフォームのローレベルの機能を用いて,GUIの見栄えと操作をエミュレーションするという方法によって,クロスプラットフォームで使える上に,拡張性が高く,直交性も高い首尾一貫したAPIを実現しています。
シグナルとスロット
Qtはシグナルとスロットというオブジェクトとオブジェクトを結びつける仕組みを提供しています。この仕組みには以下の特徴があります。
- オブジェクト間のタイプセーフコールバック
型の不一致などによって,実行時にクラッシュすることのないコールバックです。 - 疎結合とカプセル化の実現
イベントを送受信するオブジェクトが,お互いどのようなオブジェクトかを知らなくともいいようにできます。 - オブジェクト間の1対多あるいは多対1の通信
主要機能
Qtはクロスプラットフォームアプリケーション開発フレームワークを標榜しています。これを実現するために多様な機能を持っています。
表2 Qtの主要機能
| メインウィンドウアーキテクチャ |
| スタイルとスタイルシート |
| デスクトップ環境クラス |
| イベントクラス |
| ドラグ&ドロップ |
| Graphics View (グラフィックアイテムのキャンバス) |
| SVG (表示と出力) |
| モデルビュープログラミング |
| アクセシビリティ |
| 環境設定 |
| 暗黙的データ共有クラス |
| ネットワークモジュール |
| D-Bus IPC |
| 印刷 (PostScript,PDF) |
| コレクションクラス |
| スレッドクラス |
| 正規表現 (Perlをモデルに) |
| 入力チェック (入力マスク,バリデータ) |
| ヘルプシステム |
| Scriptモジュール |
| SQLモジュール |
| XMLモジュール |
| ジェネリックコンテナ |
| リソースシステム |
| プラグインシステム |
| アンドゥリドゥフレームワーク |
| ユニットテストフレームワーク |
| ActiveQtフレームワーク |
Qt付属開発用ツール
Qtに付属する主な開発用ツールには以下のようなものがあります。
- Designer(ウィジェット作成GUIツール)
- Assistant(リファレンスマニュアルブラウザ)
- Linguist(メッセージ翻訳GUIツール)
- qmake(クロスプラットフォームビルドシステム)
IDEとの統合
現在のQtは,既存のIDEに統合してQtアプリケーションの開発をしやすくしようという方針を取っていて,以下の2つの統合化が実現されています。
- Qt Eclipse Integration
Qt/C++用とQt Jambi用。プラットフォームはWindowsとLinuxで,Mac OS X用は2009/1の予定。 - Qt Visual Studio Integration
デスクトップ用とWindows CEクロス開発用。
この他に,KDEで開発されているKDevelop統合開発環境があります。

