本特集の目的と目標 
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を実現しています。     
図1  Qtのアーキテクチャ 
 
 
シグナルとスロット 
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統合開発環境があります。 
最新4.4の新機能  
Qt WebKit統合化 
WebKitにはHTMLレンダラーKHTMLをベースにしたWebCoreと、JavaScriptインタプリタKJSをベースにしたJavaScriptCoreが含まれています。KHTMLとKJSは供に、Qtをベースに開発されているKDEプロジェクトで開発され、Appleがにそれらに修正と改良を加えてWebKit としてオープンソース化しました。WebKitは、Apple Mac OS XのSafariブラウザで使用されている他に、AdobeのAIR、GoogleのGoogle ChromeとAndroidなどで使用され、これらの他にもデスクトップとモバイルで数多く使用されています。       
WebKitをQtに統合したのがQt WebKitです。Qt WebKitによって本格的なウェブブラウザがQtアプリケーション中で利用できるだけではなく、HTML中でQtのウィジェットも混在して使用でき、WebベースとQt/C++を融合したアプリケーション開発もできます。   
図2  Qt WebKitを使用したブラウザサンプルプログラム 
 
 
Phononマルチメディアフレームワーク 
Phonon は、KDEプロジェクトで開発されたクロスプラットフォームのマルチメディアAPIで、それをQtで利用できるようにしたのがPhononマルチメディアフレームワークです。  
UNIX/LinuxではGStreamer、WindowsではDirectShow、Mac OS XではQuickTimeをそれぞれバックエンドとして、それらがサポートする動画と音楽のコーデックを簡単に再生できるようにします。    
Graphics View内のウィジェット使用 
Qt4.3までは、Graphics Viewにグラフィカルアイテムのみを置けました。4.4からはウィジェットも置けるようになり、アフィン変換と投影変換を適用して、ウィジェットのスケーリングや回転などができるようになっています。KDE 4でもこのGraphics Viewの機能が効果的に使われています。     
図3  Graphics View内のウィジェット 
 
 
コンカレントプログラミング 
Qtのスレッドクラスはクロスプラットフォームになっていても各プラットフォームのスレッドのラッパーで、プログラミング上は通常のスレッドプログラミングと同じレベルのローレベルなコード記述が必要です。4.4のQtConcurrentでは、マップ/マップリデュースとフィルター/フィルターリデュースに基づく高レベルの並列処理フレームワークが追加され、簡明で安全性のよい並列処理コードを記述できます。      
Qt Windows CEプラットフォームの追加 
新たにWindows CEがプラットフォームとして追加されました。Visual Studio 2005での開発環境も提供されています。
その他 
以上の他に、XQueryとXPath サポート、ヘルプシステムの改善、プリントシステムの改良、そして組込みLinux用Qtでは、ディスプレイハードウェアの追加、DirectFBサポート、ATI ハンドヘルドインターフェースライブラリ対応などの機能改良や追加がされています。       
Qt4.5で予定されている機能  
Qtは、8ヵ月ごとにマイナーバージョンリリースされます。したがって、次のリリース4.5は2009年1月でしょう。Trolltech LABS の記事からQt4.5に入る予定の機能を見てみましょう。    
XML 
XSL-Tがサポートされ、XMLを書換えて評価実行できるようになります。対象バージョンはXSL-T2.0です。
GUIスタイル 
GNOMEデスクトップ環境でのQtアプリケーション動作時に、CleanlooksがデフォルトのGUIスタイルとして使われるようになります。  
X11でのサブピクセルレンダリング 
Freetypeのフィルタが利用できるようになります。 
Qt Script 
データバインディングやスクリプトデバッガなどの機能が追加されます。 
Qt/Windows CE  
WebKitがすでに使えるレベルになっいてるので取り込まれるでしょう。またPhononも追加され、Windows CEに不足しているコーデックも合わせて追加されます。  
オープンドキュメントフォーマット 
ODFが扱えるようになります。QTextDocumentでODFを読込み、テキストやHTMLへの変換とPDFでの印刷ができるようになります。  
WebKit 
Operaと並んでウェブ標準テストAcid3で100点をたたき出したブランチのWebKitにアプデートされるようです。Qt 4.4のWebKitのスコアは41点です。  
Qt/Mac OS X  
Qt/Mac OS Xの実装にCarbonを使用しています。Carbonが64ビット対応されないため、Cocoaに全面移行しすることで、64ビットQtアプリケーションの開発が可能になります。    
    
まとめ 
今回はQtの歴史、そして現在と展望について説明しました。次回は、Qtの基本プログラミングについて説明します。