4.6がやってきた-Qt最新事情2010

第1回速報!Qt 4.6新機能とロードマップ

2009年12月1日にQt 4.6がリリースされました。今回は、Qt 4.6の新機能の概要と今後のロードマップについて説明し、Qtがどのようになっていくかを見てみましょう。そして、Qt 4.6の最も大きな機能追加と言える、ダイナミックで動きのあるGUIを可能にするアニメーションフレーワークについて、回を改めて詳しく説明します。

新しく追加されたプラットフォーム

Qt 4.6: Supported Platforms にあるように、Qt 4.5からサポートプラットフォームが3段階にランク付けされています。

最もレベルの高いTier 1にSymbian S60が新たに追加され、次のレベルであるTier 2に、Windows 7とMac OS X 10.6(Snow Leopard)が追加されています。最もレベルの低いTier 3は、Nokiaのサポート対象外ですが、QNXとVxWorksが追加されています。以前からX11ベースのQNX向けQtがありましたが、さらにX11を使わないQWS(Qt Window System)ベースのQNX対応版が追加されています。VxWorks は、X11 が必要です。

Qt 4.7では、現在Technical PreviewのMaemoが正式に加わるでしょう。また、Windows 7とMac OS X 10.6がTier 1になり、WindowsのVisual Studio 2010版がTier 2に加わる予定です。逆にサポートレベルが下がったり廃止されるものもあります。Mac OS XのCarbonはTier 2に下がり、WindowsのMinGW 3.4とVisual Studio 2003、HP-UXのPA-RISC、Windows Mobile 5の各プラットフォームがなくなり、OpenGL ES Common Liteのサポートもなくなります。

アニメーションフレームワーク

アニメーションフレームワークは、大まかに4つの機能で構成されています。

アニメーションAPI

Qtのプロパティを動的に変更することによって、動きのあるGUIを作る機能です。ステートとトランジションと合わせて使えるようになっていて、以下のような特徴があります。

  • どのQObjectのプロパティでもアニメーション可能
  • アニメーションを結合してグループ化
  • イージングカーブを使用可能

たとえば、位置や大きさなどのプロパティを動的に変えることで、ボタンの配置などを動きのあるものにできます。イージングカーブを適用すれば、落ちて弾むような動きをさせられます。

ステートとトランジション

Qtのシグナルとスロットと融合させて、ハレルのステートチャートとSCXML(State Chart XML)を完全に実装していて、以下のような特徴があります。

  • アプリケーションの動作の意味付けを簡明化
  • 動作の形式化による保守性の向上
  • イベントドリブンプログラミングの強化
  • アプリケーションロジックの記述の検証可能化

ネストしたステートもきちんと実装されているので、本格的なステートとトランジションによるプログラミングが可能です。

グラフィックスエフェクト

What's New in Qt 4.6のページにあるように、ぼかし、影、色付け、透明度などのグラフィカルなエフェクトを、QGraphicsItem や QWidgetに適用して、ユーザインターフェースを視覚的に際立たせたり、強調させたりできます。以下のような特徴があります。

  • 任意のペイントデバイスにエフェクトを適用可能
  • 前述のようなよく使われるエフェクトはビルトイン済
  • 独自のエフェクトを追加拡張可能

宣言的UI

宣言的UIの目的は、ユーザインターフェースをデザインするグラフィカルデザイナーとプログラマが共同で開発する際に、JavaScriptベースのQML言語を介して、両者の垣根を取り払って、協力して開発を進めやすくすることです。

宣言的UIで記述したアプリケーションの動画がYouTubeにいくつもあります。どのようなGUIが作れるかは、以下のビデオを見るとよくわかり、興味が湧くはずです。

Declarative UI (QML)
URLhttp://doc.trolltech.com/qml-snapshot/declarativeui.html
YouTube - QML Demo: Ars Feed Wall
YouTube - QML Dev Days 2009
YouTube - QML flickr browser demo

当初は、Qt 4.6でのリリースが予定されていましたが、2009/12/1のリリースには入りませんでした。しかし、2週間後の2009/12/14に、別のモジュールとして正式リリースされ、Qt 4.6を使って、宣言的UIをインストールして使えるようになりました。

Qt Labs Blogs >> Qt Declarative for Qt 4.6.0 released
URLhttp://labs.trolltech.com/blogs/2009/12/14/qt-declarative-for-qt-460-released/

パッチリリースの4.6.1以降に含まれる予定で、めったにないパッチリリースでの機能追加です。

なお図1のように、Qt 4.6と同時にリリースされたQt Creatorには、すでにQMLプロジェクト作成機能が入っています。

図1
図1

マルチタッチとジェスチャー

Windows 7とMac OS Xで使える機能で、画面の2ヵ所をタッチして、間隔を変えると拡大縮小するようにしたり、複数のスライダーを同時操作したりできるようにする機能です。指一本よりもいろいろな操作をさせられます。ジェスチャーの実装には、前述のステートマシンが使えます。

  • アプリケーションを今までよりもよりよく操作可能
  • UI コンポーネントの指による操作の簡単化
  • パン(QPanGesture⁠⁠、ピンチ(QPinchGesture⁠⁠、スワイプ(QSwipeGesture⁠⁠、タップ&ホールド(QTapAndHoldGesture⁠⁠、タップ(QTapGesture)などの基本的なジェスチャーを用意
  • 独自のジェスチャーの追加が可能

DOMアクセスAPI

数年前から計画されていて、Qt 4.6で機能追加されました。WebページやXMLの要素へのアクセスと操作をCSSセレクタで行えるようにしていて、高速な動作を実現しています。

パフォーマンス改善

以下のような改善がされています。

  • QGraphicsViewのレンダリングアルゴリズムの書き換え
    操作していて、グラフィックスビューが速くなったと感じました。宣言的UIはグラフィックスビューを使って実装されているので、軽快な動作はアニメーションGUIにも効果的です。
  • QNetworkAccessManagerのオーバーヘッドの削減
  • OpenVGによる描画のハードウェアアクセラレーション
  • WebKitのJavaScriptエンジンJavaScriptCoreを使うことにって、QtScriptの実行速度が劇的に改善されています。詳しくは、以下のQt Labs Blogsの記事を見てください。
  • Qt Labs Blogs >> QtScript in 4.6
    URLhttp://labs.trolltech.com/blogs/2009/11/23/qtscript-in-46/
  • Win9xサポートコードの削除による軽量化

XMLスキーマバリデーション

DOMアクセスよりもかなり前から望まれていた機能で、XMLスキーマバリデーションができるようになりました。

3Dイネーブラー

Qtでは、3DはOpenGLを使って実装します。古くは、OpenGLをそのまま使うようなものでしたが、Qtの2D機能と併用できるようになったりと、Qtで使いやすくする機能が追加されて来ました。それをさらに押し進めて、より使いやすくしようとする試みです。リファレンスには、どのようなものが3Dイネーブラーかがはっきりとわかりやすく書かれていませんが、詳しい使い方も含めた以下の記事がQt Labs Blogsに載りました。

Qt Labs Blogs >> Qt/3D features in Qt 4.6
labs.trolltech.com/blogs/2009/11/10/qt3d-features-in-qt-46/">URLhttp://labs.trolltech.com/blogs/2009/11/10/qt3d-features-in-qt-46/
Qt Labs Blogs >> Qt/3D brings Qt-style coding to 3D
labs.trolltech.com/blogs/2009/11/18/qt3d-brings-qt-style-coding-to-3d/">URLhttp://labs.trolltech.com/blogs/2009/11/18/qt3d-brings-qt-style-coding-to-3d/

Qtのロードマップ

ハイブリッド開発

QtではすでにQtWebKit、QtScript、QtXmlPatterns、QtNetworkを組み合わせ、QObjectをWebのスクリプト中で使えるようになっています。これをさらに使いやすくし、ウェブ技術とQt C++を結合して、強力で拡張性の高いものにする試みです。以下の 2 つのハイブリットアプリケーション開発を可能にします。

  • ①Qt C++アプリケーションで、HTML、CSS、JavaScriptを使用した開発。
  • ②ブラウザ/スタンドアローン ウェブランタイムアプリケーションで、Qt C++で記述されたサービス、宣言型 UI を使用した開発。

Qtモービリティ

Qt Extended(旧Qtopia Phone Edition)がQt 4.5のリリース前後に廃止され、その携帯機器向けの機能が別の形でリリースされることと成っていました。Qtモービリティには、それらの機能だけではなく、現在の携帯機器に必要な機能が実現される予定です。Symbian、Maemo、Windows Mobile、組込みLinuxだけではなく、デスクトップでも使うことができます。開発中のAPIは、ロケーション、メッセージング、コンタクト、システム情報、マルチメディア、ベアラ管理、センサーなどです。

テクノロジープレビューパッケージが Qt 4.6 のリリースと同時に出ています。

Qt Labs Blogs >> Qt Mobility Project - Technology Preview Package
URLhttp://labs.trolltech.com/blogs/2009/12/01/qt-mobility-project-technology-preview-package/

Qt Labsにこのプロジェクトの説明があります。

Qt Labs - Projects/QtMobility
URLhttp://labs.qt.nokia.com/page/Projects/QtMobility

Qtツール

Qt Creator

すでにSymbianがサポートされ、Maemoもサポートされる予定です。個人的には、Qt for Embedded Linux向けにもサポートされ、リモートデバッグもできるようになって欲しいです。Qt Creator 1.3.0 では、カーソル下のシンボルのリネイムやシンボルの使用箇所の検索といった、リファクタリング機能が追加されています。

プロジェクトバウハウス(Bauhaus)

現在リリースされてるアニメーションフレームワークのための開発ツールは、Qt CreatorによるQMLの編集とその実行機能が主なものです。このプロジェクトでは、グラフィカルデザイナーとプログラマーの双方が使え、QMLを視覚的にも扱えるようにして、QML と C++ の両方が使用でき、ステート編集、容易なレイアウト編集、視覚的なプロパティ編集、そしリファクタリングもしやすいツールを目指しています。

Visual StudioアドインとEclipseインテグレーション

保守だけではなく、継続して開発予定です。

Lighthouse

Qt for Embedded Linuxで、QWSを使わない実装をし、いろいろなグラフィックスシステムへの移植性を高めようというプロジェクトです。その結果として、たとえばOpenGL ESやOpenVGによるアクセラレーションをウィジェットの描画に効かせられるようになります。

リポジトリと使用方法の手引きは以下の通りです。

lighthouse in qt-developers - Qt by Nokia
URLhttp://qt.gitorious.org/+qt-developers/qt/lighthouse
Getting started with Lighthouse
URLhttp://qt.gitorious.org/qt/pages/GettingStartedWithLighthouse/

おすすめ記事

記事・ニュース一覧