Qt最新事情-QtでWebKitを使ってみよう

第1回Qtの歴史~Qt 4.4の新機能

本特集の目的と目標

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のアーキテクチャ
図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を使用したブラウザサンプルプログラム
図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内のウィジェット
図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の基本プログラミングについて説明します。

おすすめ記事

記事・ニュース一覧