Qt ホワイトペーパー

※Qt Developer NetworkのQt Whitepaperのなんちゃって訳をしてみようと頑張っているページです(;^ω^)イマイチ日本語になってませんがやっつけなので意味が何となくわかればいいやぐらいです(・_・;)

このホワイトペーパーはQt C++フレームワークについて記述しています。 QtはクロスプラットフォームGUI開発を「write onece, compile anyware」(1つのコードでそれぞれの環境でコンパイルできる)というアプローチでサポートしています。 1つのソースツリーとシンプルなリコンパイルで、Windows、Mac OS X、Linux、Solaris、HP-UX、その他多くのバージョンのX11を使用したUNIX用のアプリケーションを書くことができます。 Qtアプリケーションはembedded Linux、SymbianとWindows CEプラットフォームで実行できるようにコンパイルすることもできます。

Qtはクロスプラットフォームでマルチメディアと3D、国際化、SQL、XML、そしてユニットテストをサポートし、同時にプラットフォーム依存の特別なアプリケーションをもサポートします。

Qtアプリケーションは、IDEに統合されたフレキシブルなユーザーインターフェイスビルダーであるQt Designerによって、視覚的に構築することができます。

Qt 4.7から導入されたQt Quickは、直感的なユーザーインターフェイスの現代的なラピッドプロトタイピングと作成のための技術を集めた基盤です。 これらはこのホワイトペーパーの後のQt Cuickセクションで簡単に解説されており、さらに詳細はIntroduction to Qt Quick for C++ Developersホワイトペーパーに記述されています。

はじめに

Qtは高性能なクロスプラットフォームソフトウェア開発のC++フレームワークのデファクトスタンダードです。 広範囲のC++クラスライブラリに加えて、迅速かつ簡単にアプリケーションを作成するツールが含まれています。 Qtのクロスプラットフォーム機能と国際化サポートは、最大限の市場にQtアプリケーションが対応できることを意味しています。

Qt C++フレームワークは1995年から商用アプリケーションの中心を担っています。 QtはAdobe®、Boeing®、Google®、IBM®、Motorola®、NASA、Skype®のような様々な企業と組織で使われ、多数の小規模な企業や組織でも使用されています。 Qt 4は以前のバージョンのQtより簡単に使用できるようにデザインされており、より強力な機能も付加されています。 Qtのすべての機能と一貫したインターフェイスの提供は学習を助け、開発者の作業負荷を軽減し、プログラマーの生産性を向上させます。 Qtは常に完全なオブジェクト指向です。

このホワイトペーパーはQtのツールと機能の概要を示します。 各セクションは関連する機能の詳細な解説の前に非技術的な紹介から始まります。 各テーマエリアごとにオンラインリソースへのリンクがあります。

Qt商用版の30日間の評価のためにhttp://qt.digia.com/en/downloads/ [qt.digia.com]を訪れてください。 QtはLGPLライセンスの元でも利用できます。

要旨

Qtは標準的なGUI機能を提供する豊富なウィジェット(Windows用語でのコントロール)を含んでいます。 Qtは多くの従来のフレームワークで使われていた古く危険なコールバック手法を置き換えるために「シグナルとスロット」と呼ばれる革新的なオブジェクト間のコミュニケーションを導入します。 Qtはまた、マウスクリック、キー押下、その他のユーザー入力を処理する一般的なイベントモデルも提供します。 QtのクロスプラットフォームGUIアプリケーションは、メニュー、コンテキストメニュー、ドラッグアンドドロップ、ドッキングツールバーのような現代的なアプリケーションに必要なユーザーインターフェイス機能をサポートします。 Qtによって提供されるデスクトップ統合機能は他のデスクトップ環境でのアプリケーションの利用を可能にし、各プラットフォーム上で提供されるサービスのいくつかを利用しています。

QtにはユーザーインターフェイスをグラフィカルにデザインするQt Designerというツールも含んでいます。 Qt Designerは絶対座標に加えてQtの強力なレイアウト機能もサポートしています。 Qt Designerは純粋にGUIのデザインでの使用の他、ポピュラーな統合開発環境に統合してアプリケーション全体の作成にも使用できます。

Qtはマルチメディアと3Dグラフィック(ページ)に対し優れたサポートをしています。 Qtはプラットフォーム非依存のOpenGL®プログラミングのためのデファクトスタンダードGUIフレームワークです。 Qtの描画システムは、すべてのサポートされたプラットフォームに高品質なレンダリングを提供します。 洗練されたキャンバスフレームワークは、Qtの高度な描画機能を利用してインタラクティブなグラフィカルアプリケーションの開発を可能にします。

Qtは標準的なデータベースを使用して、プラットフォーム非依存のデータベースアプリケーションを作成することができます。Qtには、Oracle®、Microsoft® SQL Server、Sybase®、 Adaptive Server、IBM DB2、PostgreSQL™、MySQL®、Borland® Interbase、SQLite、とODBC準拠のデータベースのネイティブドライバーが含まれています。Qtはデータベース用のウィジェットを含み、任意の組み込みもしくはカスタムウィジェットでデータベースに対応できます。

Qtのプログラムは、すべてのサポートプラットフォーム上で、Qtのスタイルとテーマを使用したネイティブな外観を持っています。一つのソースツリーから、再コンパイルするだけで、Windows® XP®and Windows Vista™、 Mac OS X®、 Linux®、 Solaris™、 HP-UX™とその他バージョンのX11を使用したUnix®用のアプリケーションを作成することができます。Qtのqmakeビルドツールは、ターゲットプラットフォームに適したメイクファイルまたは.dspファイルを作成します。

Qtのアーキテクチャーは基盤となるプラットフォームを利用しているので、多くの顧客はQtのアプローチを好むため、Windows、Mac OS X、とUnixの単一のプラットフォームでQtを使用しています。Qtは、WindowsのActiveX®やUnixのMotif™などのプラットフォーム固有の機能をサポートしています。詳細はsec:Qt’s-Architectureのセクションを見て下さい。

QtはUnicode™を使用して、広く国際化をサポートしています。QtはQt Linguistやその他の翻訳をサポートツールを含んでいます。アプリケーションは、アラビア語、中国語、英語、ヘブライ語、日本語、ロシア語、やその他の言語をUnicodeでサポートし、簡単に使用、共存させることができます。

Qtにはドメイン固有のさまざまなクラスが含まれています。例えば、QtにはXMLベースフォーマットデータの読込と操作のためのSAXとDOMクラスを含むXMLモジュールがあります。オブジェクトはSTLコンパチブルなコレクションクラスとしてメモリに保存され、Java®とC++スタンダードテンプレートライブラリ(STL)スタイルのイテレーターを使用した処理することができます。ローカルおよびリモートファイルは、Qtのインプット/アウトプットとネットワーキングクラスが提供する標準プロトコルを使用して処理されます。

Qtアプリケーションは、プラグインとダイナミックライブラリーで機能を拡張することができます。プラグインは、追加で、コーデック、データベースドライバ、イメージフォーマット、スタイルとウィジェットを提供します。プラグインとライブラリは、独自の権利で製品として販売することができます。

QtScriptモジュールは、JavaScriptに関連するEMACSベース言語である、Qt Scriptでアプリケーションを記述可能にします。このテクノロジーによって、開発者はユーザーにアプリケーションの一部を記述する目的のために、限定的なアクセスを与えることができます。

Qtは成熟したC++フレームワークであり、世界中で使用されています。Qtの多くの商用用途に加えて、オープンソース版のQtは、Linuxデスクトップ環境のKDEの基盤となっています。Qtは、クロスプラットフォームな構築システム、視覚的フォームデザイン、エレガントなAPIで、アプリケーション開発を楽しくします。

オンラインリソース

http://qt.nokia.com/qt-in-use [qt.nokia.com]

グラフィカルユーザーインターフェイス

Qtは、アプリケーション用の、グラフィカルユーザーインターフェイス作成に使用するための、標準的なウィジェットの豊富なセットを提供しています。レイアウトマネージャーは、ユーザー画面の言語やフォントに合わせて、ウィジェットの配置やリサイズを行うために使用されます。

ウィジェトは、ユーザーインターフェイス作成のために、ヴィジュアルな要素を組み合わせたものです。ボタン、メニューとスクロールバー、メッセージボックスとアプリケーションウィンドウは、すべてウィジェットの例です。

レイアウトマネージャーは親ウィジェットエリアの中の子ウィジェットを整理します。それらは子ウィジェットの位置とサイズを自動的に設定し、トップレベルウィジェットの最小とデフォルトのサイズを賢明に提供し、そしてその内容が変更された時に自動的にウィジェットを再配置します。

シグナルとスロットは、アプリケーションコンポーネント同士が、タイプセーフな方法で簡単に通信できるように接続します。このオブジェクト間の通信の形式は、全ての標準的なウィジェットで有効で、独自のカスタムウィジェットで開発者が使用することもできます。

Qtが提供するウィジェットの種類。

ウィジェット

上図はウィジェットの種類を示しています。これらは、標準のテキスト入力ウィジェット、チェックボックス、ラジオボタン、スライダーとプッシュボタン、および日付と時間を入力する特別なウィジェットです。

ラベル、メッセージボックス、ツールチップとその他のテキストウィジェットは、単一の色、フォント、言語に限られません。Qtのテキストレンダリングウィジェットは、HTMLのサブセットを使ってリッチなマルチランゲージのテキストを表示することが可能です。

タブウィジェットやグループボックスなどのコンテナウィジェットを利用でき、ユーザーインターフェイスコンポーネントの関連するグループのために使うことができます。これらのウィジェットは、設計者の新しいユーザーインターフェイス作成を助けるために、Qt Designer内で、特別に管理されます。スクロールビューなどの、より複雑なウィジェットは、多くの場合開発者よりも、ユーザーインターフェイス設計者によって、動的コンテンツや特別な表示のために使われます。

開発者は、QWidgetクラスまたは、そのサブクラスの一つを基にして、サブクラス化し、独自のウィジェットとダイアログを作成することが可能です。このような特別なウィジェットは、独自のコンテンツの描画、ユーザー入力への応答、そして独自のシグナルとスロットの提供のために、完全にカスタマイズすることができます。

Qtが提供する多くのその他のウィジェットはここにあります。利用可能なジェットの多くを、QtのオンラインのWidget Gallery内のクラスドキュメントへのリンクに示します [qt.nokia.com]

レイアウト

レイアウトは、スタイル、方向またはテキストフォントのアップデート時に、それらを適用する、柔軟性と即応性を提供します。

レイアウトは、開発者がアプリケーションで国際化をサポートすることに役立ちます。固定されたサイズと位置では、翻訳されたテキストは、多くの場合切り捨てられます; レイアウトでは、子ウィジェットは自動的にリサイズされます。さらに、右から左への書式のシステムで作業するユーザーへ、より自然な外観を提供するために、ウィジェットの配置を反転することができます。

レイアウトは、下から上と右から左にして実行することもできます。右から左のレイアウトは、アラビア語とヘブライ語のような右から左の書式をサポートする、国際化アプリケーションに便利です。組み込みレイアウトは、反転した表示の一貫した外観を提供のために、Qtのスタイルシステムに、完全に統合されています。

Qt Designerでは、ウィジェット配置のためのレイアウトの使用に完全に対応しています。

シグナルとスロット

シグナルとスロット [developer.qt.nokia.com] は、Qtオブジェクト間の通信に使用されます。シグナルとスロットメカニズムは、Qtの中核機能であり、恐らく他のフレームワークで提供される機能と最も異なる部分です。シグナルとスロットは、オブザーバー パターン [jp.wikipedia.org] (Observer pattern [en.wikipedia.org]) の実装を容易にします。

ウィジェットは、イベント発生時にシグナルを発生させます。例えば、ボタンは、クリックされた時に"clicked"シグナルを発生させます。開発者は、関数を作成("スロット")し、スロットにシグナルを関係付けるために、connect()関数を呼び出すことで、シグナルへの接続を選択することができます 。Qtの、シグナルとスロットメカニズムは、クラスがお互いの知識を持つ必要はなく、とても容易に再利用性の高いクラス開発が出来ます。シグナルとスロットは、タイプセーフなので、型エラーは、警告として報告され、クラッシュ発生の原因になりません。

例えば、Quitボタンのclicked()シグナルをアプリケーションのquit()スロットに接続すると、ユーザーがQuitをクリックするとアプリケーションが終了します。コードでは、このように書きます

connect(button, SIGNAL(clicked()), qApp, SLOT(quit()));

接続は、Qtアプリケーションを実行中、いつでも追加または削除でき、シグナル発生時に実行か、キューを使って後に実行するようにセットアップすることができ、異なるスレッド間でも行うことができます。

シグナルとスロットメカニズムは、標準のC++で実装されています。実装には、C++プリプロセッサーとmoc(Qtに含まれるメタオブジェクトコンパイラー Meta-Object Compiler)が使用されます。コード生成は、Qtビルドシステムによって自動的に実行されます。開発者は、生成されたコードの編集も見る必要もありません。

シグナルとスロットの処理に加えて、メタオブジェクトコンパイラーは、Qtの翻訳メカニズム、プロパティシステムと、拡張された実行時型情報をサポートします。それはまた、C++プログラムの実行時イントロスペクションを、全ての対応プラットフォーム上で動作する方法で可能にします。基本システムが提供するこれらの機能は、Qtのメタオブジェクトシステムとして知られている(ページを参照してください。
※イントロスペクション(introspection):オブジェクト内部の継承関係やメソッドの情報

オンラインリファレンス

http://qt.nokia.com/doc/latest/all-examples.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/layout.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/object.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/signalsandslots.html [qt.nokia.com]

アプリケーションの特徴

Qtでの現代的なGUI作成は、素早くシンプルで、手書きのコードや、QtのヴィジュアルデザインツールであるQt Designerを使用して行うことができます。

Qtは、メニュー、ツールバーとドックウィンドウのある、現代的なGUIアプリケーションの作成に必要な機能をすべて提供します。Qtは、SDI(シングルドキュメントインターフェイス)と、MDI(マルチドキュメントインターフェイス)の、両方をサポートします。Qtは、ドラッグアンドドロップとクリップボードもサポートします。

フルセットのダイアログは、ファイル、フォルダー、フォントと色の選択を含んで提供します。実際には、標準ダイアログ提示のために、必要なすべては、Qtの静的で便利な関数の一つを、1行のステートメントで使うだけです。


Qt Assistantは、Qtのドキュメント表示のために、多くのメインウィンドウアプリケーション機能を使っています。

Qtは、ユーザーインターフェイスプログラミングを簡素化するために、アクションを使用します。例えば、メニューオプション、ツールバーボタン、そしてキーボードアクセラレーターが、すべて同じアクションを実行するならば、アクションは一度だけのコーディングを必要とします。

Qtは、ユーザー設定、最近使用したファイル、ウィンドウとツールバーの位置とサイズなどの項目を、後に使用するために、システムレジストリやテキストファイルを使用して、プラットフォーム非依存の方法で、アプリケーション設定として保存できます。

マルチスレッドプログラミングのサポートは、一般的な構造を持つクラスの集合で提供され、計算の実行、長時間のタスク、または、単に応答性向上のために、スレッドを利用したQtアプリケーションを書くことを可能にしています。

また、アプリケーションは、ユーザーのデスクトップ環境により提供されたサービスと対話するために、Qtのデスクトップ統合機能を使うことができます。

メインウィンドウの機能

QMainWindowクラスは、一般的なアプリケーションのメインウィンドウを提供します。メインウィンドウは、一つの標準ウィジェットセットを含んでいます。メインウィンドウの上部は、メニューバーが占めていいて、その下のツールバーは、ウィンドウの中心の周りのツールバーエリアに配置されます。メインウィンドウの、下部ツールバーエリアの下のエリアは、ステータスバーによって占められています。ツールチップと"What's this?"ヘルプは、ユーザーインターフェイス要素のバルーンヘルプを提供します。

QMenu

QMenuウィジェットは、垂直リストでユーザーにメニューアイテムを示します。メニューは、単独で動作でき(例えば、コンテキストポップアップメニュー)、メニューバー内か、他のポップアップメニューのサブメニューとして表示することができます。メニューは、ティアオフハンドルを持つことができます。

それぞれのアイテムは、アイコン、チェックボックス、アクセラレーターを持つことができます。メニューアイテムは、通常アクション(例えば、"Save")に対応し、ユーザー選択時に、それらに関連付けられたスロットを実行します。Qtのレイアウトマネージャーは、任意のメニューバーを考慮します。Mac OS Xでは、メニューバーはスクリーンの上部に表示されます。

Qtのメニューは、とても柔軟で、アクションシステムの一部として統合されています(アクションを参照してください)。アクションは、有効化または無効化、メニューへの動的追加、後に再び削除をすることができます。

QToolBar

Mac OS Xの統一されたツールバーサポートは、隣接するツールバーとウィンドウタイトルバーを一体にして、アプリケーションのルック&フィールを向上させます。

ツールバーは、ユーザーがアクションを実行するためにアクセス可能な、ボタンのコレクションと他のウィジェットを含んでいます。それらは、メインウィンドウの中心エリアの上下左右のエリア間で移動することができます。任意のツールバーは、ツールバーエリア外にドラッグし、独立したツールパレットとしてフロート化できます。

QToolButtonクラスは、アイコン付きのツールバーボタン、スタイル付きのフレームと、任意のラベルを実装しています。トグルツールバーボタンは、オンとオフの切り替え機能を持ちます。他のツールバーボタンはコマンドを実行します。アクティブ、無効、有効モードと、オンとオフ状態で、違ったアイコンを提供することができます。もしも、1つだけアイコンを提供した場合、Qtは、ヴィジュアルキューを使って、例えば、無効なボタンはグレーにするなど、自動的に状態を区別します。ツールバーボタンは、ポップアップメニューをトリガすることができます。

ドックウィンドウは、ユーザーがウィンドウをツールバー領域内か、別のツールバーエリアの一つから移動できる。ユーザーはドックウィンドウをアンドックでき、それをアプリケーション上にフロートさせたり、最小化することができます。ドックウィンドウのドックエリアへ出し入れにスムーズなスライドアニメーションが使われます。

ドック領域は、複数の行と列に重ねられたドックウィンドウを許可するためにネストすることもでき、そして、ドックウィンドウは共有領域に一緒に重ねることができます - この時、ドックウィジェットはタブの中に保持されます。

ドックウィンドウのカスタマイズも可能です。それらは、垂直のタイトルバーで表示し、個別スタイルのタイトルバーとウィンドウコントロールを与えることができます。

Qt DesignerQt Linguistなどのアプリケーションは、ドックウィンドウを広範囲に使用しています。ドックウィンドウとツールバーの位置の保存と復元操作を提供し、アプリケーションは、簡単にユーザーの設定した作業環境の復元が可能です。

QStatusBar

QStatusBarクラスは、ステータス情報を表示するために適した水平のバーを提供します。例えば、ヒントを表示することができます:

statusBar()->showMessage("Ready");

このコードは、ステータスバー上に"Ready"というメッセージを表示するでしょう。任意のウィジェットでstatusHintプロパティをセットできます。

アクション

アプリケーションは通常、ユーザーに特定のアクションの実行のための、いくつかの違う方法を提供します。例えば、ほとんどのアプリケーションでは伝統的に、"Save"アクションを、メニュー、ツールバー(適切なアイコンののあるツールバーボタン)と、アクセラレーターから提供しています。QActionクラスはこの概念をカプセル化しています。それはプログラマーが、一箇所にアクションを定義することを可能にします。

同様に、二度手間を避けるために、QActionの使用は、メニューアイテムの状態と関連したツールバーボタンの状態の同期を確実にし、必要に応じてインタラクティブなヘルプを表示します。アクションを無効にすると、任意の対応するメニューアイテムとツールバーボタンを無効にします。同様に、もしもユーザーがツールバーのトグルボタンをクリックすると、対応するメニューアイテムもトグルされます。

ダイアログとウィザード

ほとんどのGUIアプリケーションは、特定の操作のユーザーとの対話にダイアログボックスを使用します。Qtは、ほとんどの共通処理のための簡易関数を持つ既製のダイアログクラスが含まれています。いくつかのQtのダイアログのスクリーンショットを以下に示します。Qtは、カラー選択、印刷、進捗具合の表示とメッセージの表示などの標準ダイアログを提供します。

プラスティック・スタイルのQFileDialogQFontDialogを示します。WindowsとMac OS Xでは、ネイティブダイアログが代わりに使用されます。

プログラマーは、QDialogをサブクラス化することによって、独自のダイアログを作成することができます。Qt Designerはまた、新しく設計を始める開発者の助けになる、ダイアログテンプレートを含んでいます。

ウィザードは、利用可能なオプションをステップ・バイ・ステップで設定し、必要に応じてヘルプを提供し、共通のタスクとプロセスを通してユーザーをガイドするために使用されます。Qtは、各サポートプラットフォーム上の適切でネイティブなルックアンドフィールで、ウィザードを構築するための直感的かつ柔軟なAPIを提供しています。

QWizardクラスは、基本的なプラットフォーム固有のルックアンドフィールを越えて、ウィザードの外観をカスタマイズする機能を提供します。このクラスのインスタンスは、また、どのページをユーザーに示すかの順序を制御します。QWizardPageは、ユーザー入力を確認し格納するための機能を提供する標準的なウィジェットです。

対話型ヘルプ

アプリケーションは、ユーザーインターフェイスの要素を説明するためや、ユーザーのアシストのために、様々な対話型ヘルプのフォームを使用します。Qtは、ヘルプメッセージを与える2つのメカニズムを提供します: 状況依存ヘルプであるツールチップと、より長く有益なメッセージである"What's this?"ポップアップヘルプです。これらは両方共、Qtのアクションシステムに統合されています。

開発者は、Qtのヘルプモジュール内のクラスを使うことによって、アプリケーション独自のヘルプブラウザとドキュメントセットとして、Qt Assistantを利用することができます。このモジュールはまた、カスタム表示目的でドキュメントにアクセスするために開発者が使用できるAPIを提供し、恐らく、ユーザーに関連情報の一部を示すためにツールチップと"What's This?"クラスを使用します。

セッティング

QSettingクラスを使用すると、ユーザー設定とその他のアプリケーションの設定を、ディスク上に簡単に保存できます。Windows、Mac OS XとLinuxプラットフォーム上では、設定はシステムの標準の場所に保存されます; その他のプラットフォーム上では、それらはテキストファイルに出力されます。

Qtの様々なデータ型は、QSettingsと共にシームレスに使用でき、ストレージに保存して、後にアプリケーションで取り出すことができます。Qtのデータ型のシリアライズについての詳しい情報は、File-Handlingを参照してください。

マルチスレッドと並列プログラミング

Qtアプリケーションは、複数のスレッドを使用することができます: ユーザーインターフェイスの応答のために1つのスレッドを保持し、そして、1つ以上の他のスレッドは、複雑な計算処理や、大きなファイル読み込みといった時間のかかる処理を実行します。Qtは、スレッド、ミューテックス、セマフォ、スレッドグローバルストレージとプリミティブロックを表すクラスを提供します。

並列プログラミング機能は、よく知られているMapReduceとFilterReduceアルゴリズム実装も提供します。これらは、Qtアプリケーションに並列テクニックを使ってより便利に作成するために、標準のコンテナクラスを使ってQtのオブジェクトモデルと統合されています。

Qtのメタオブジェクトシステムは、シグナルとスロットを使ってそれぞれのスレッドの通信を可能にし、開発者はシングルスレッドアプリケーションを作成し、後に大規模な再設計なしでマルチスレッドに適合させることができます。

デスクトップ統合

アプリケーションは、Qtのデスクトップ統合クラスを使用することで、ユーザーのデスクトップ環境にが提供するサービスと対話するために拡張することができます。これらはQSystemTrayIcon(システムトレイ内のインジケーターの提供によって長時間使用するアプリケーションのよく使われる)から、QDesktopServices(mailto:やhttp://のURLなどのリソースを最も適切なアプリケーションで処理できる)までに及びます。

オンラインリソース

http://qt.nokia.com/doc/latest/qt4-mainwindow.html [qt.nokia.com]

Qt Designer(Qtデザイナー)

Qt Designerは、Qtアプリケーションのためのグラフィカルユーザーインターフェイスデザインツールです。アプリケーションは、すべてソースコードで書くことも、素早い開発のためにQt Designerを使用することもできます。コンポーネントベースアーキテクチャーは、開発者にカスタムウィジェットとエクステンションでQt Designerを拡張し、さらに統合環境への統合を可能にします。

Qt Designerでのフォーム設計は、簡単な作業です。開発者は、フォーム上にツールボックスからウィジェットをドラッグし、それらを選択、切り取り、貼り付けとリサイズするために、標準の編集ツールを使います。各ウィジェットのプロパティは、プロパティエディターを使用して変更できます。ウィジェットの正確な位置とサイズは重要ではありません。開発者は、ウィジェットを選択してそれらにレイアウトを適用します。例えば、いくつかのボタンウィジェットを選択し、"lay out horizontally"オプションを選択することによって、横に並べて配置できます。この設計方法はとても迅速で、このようなフォームはエンドユーザーの好む任意のウィンドウサイズに収まるように適切にスケールします。Layouts for information about Qt’s automatic layoutsを参照してください。

Qt Designerは、ユーザーインターフェイスデザインにおける、”コンパイル、リンクと実行”サイクルの時間の消費を削減します。これは修正や設計変更を容易にします。Qt Designerのプレビューオプションは、開発者が他のスタイルのフォームを見ることができます; 例えば、Mac OS X開発者が、Windowsスタイルのフォームをプレビューできます。フォームは、ターゲットデバイスの表示制約と外観をシミュレートする”スキン”を使って、プレビューすることができます。

Windows上の商用ライセンシーは、Microsoft Visual Studio®内からQt Designerのユーザーインターフェイスデザイン機能を楽しむことができます。Qt Development Frameworksはまた、IDEフレームワーク内の他のQtテクノロジーと並んで、Qt Designerを組み込んだクロスプラットフォームなEclipse™ IDEのために、Qt統合プラグインも提供します。

Qt Designerでの作業

開発者は、”ダイアログ”スタイルアプリケーションと”メインウィンドウ”スタイルアプリケーションの両方を、メニュー、ツールバー、バルーンヘルプ、と他の標準機能付きで作成できます。いくつかの形のテンプレートは、供給されており、さらに開発者は、アプリケーションやアプリケーションのファミリーに一貫性を持たせるために、独自のテンプレートを作成することができます。プログラマーは、独自のウィジェットを作成でき、簡単にQt Designerと統合することができます。

Qt Designerは、アプリケーション開発にフォームベースのアプローチをサポートしています。フォームは、ユーザーインターフェイス(.ui)ファイルで示され、C++に変換されコンパイルされてアプリケーション内に入れられるか、ユーザーインターフェイスの動的生成のために実行時に処理されます。Qtのビルドシステムは、設計工程を簡単にするためにユーザーインターフェイスのコンパイル時構築を自動的に行うことができます。
アプリケーションの作成時に、ソースコードを作成編集するたにQt Designerと共に使用するツールは各開発者の個人的好みに依存します; Microsoft Visual StudioやEclipse環境内から、開発のためにQt Designerで提供される統合機能の利点を活用したいと思う人もいるでしょう。


Qt Designerのユーザーインターフェイスの概観。

Qt Designerの拡張

Qt Designerの基礎として使用されているコンポーネントベースアーキテクチャーは、特に開発者がコンポーネントでユーザーインターフェイスと編集ツールを拡張できるように設計されています。加えて、アプリケーションのモジュール化は、Microsoft Visual StudioやKDevelopのような統合開発環境内からQt Designerのユーザーインターフェイスデザイン機能を利用可能にします。

QtDesignerモジュールは、.uiファイルとQt Designerの拡張で動作する計20を超えるクラスを提供します。これらの多くは、サードパーティーが、アプリケーション自身のユーザーインターフェイスのカスタマイズすることを可能にします。

組織内作業のためのサードパーティーとカスタムのウィジェットは、簡単にQt Designerに統合されます。Qt Designer内での使用に対応する既存のウィジェットは、プラグインとしてコンパイルされたウィジェットのみで、デフォルトのウィジェットプロパティとウィジェットの新しいインスタンス作成を提供するためにインターフェイスを使用します。プラグインのインターフェイスは、sub:Pluginsで説明されるものと同様のマクロを使って、Qt Designerへエクスポートされます。

オンラインリソース

http://qt.nokia.com/doc/latest/designer-manual.html [qt.nokia.com]

http://qt.nokia.com/products/developer-tools [qt.nokia.com]

http://qt.nokia.com/doc/latest/qtdesigner.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/examples.html [qt.nokia.com]

グラフィックとマルチメディア

Qtは、2Dと3Dグラフィックの素晴らしいサポートを提供しています。Qtの2Dグラフィッククラスは、ベクターとラスターをサポートし、広く拡張性のある種類のイメージフォーマットの保存と読込ができ、テキストとグラフィックスをポータブルドキュメントフォーマット(PDF)ファイルにエクスポートすることができます。Qtは、変換されたユニコードリッチテキストの描画と、スケーラブルベクターグラフィックス(SVG)の描画が可能で、そしてインタラクティブアプリケーションの要求する厳しい要求のために十分な機能のキャンバスを提供します。Qtは、オーディオとビデオのファイルとストリームの再生機能も提供しています。

グラフィックスは、Qt内のペイントデバイスで表され、開発者が異なるデバイス上でのグラフィックス描画に同じコードを再使用することを可能にするためのデバイス独自のペインターオブジェクトを使用して描画されます。(sub:Paintingのページを参照してください)このアプローチの強力で幅広い描画操作は、Qtによってサポートされた各デバイスで利用可能なことを保証され、また、開発者がニーズに最も適したデバイスの選択することを可能にします。


Boxesデモンストレーションは、一連のQtのグラフィカル機能を示します。

インタラクティブなキャンバスを必要とするグラフィカルアプリケーションは、必要に応じて複数のビューを使用し、インタラクティブな多数のシーンの管理とレンダリングのためにグラフィックビューフレームワークを活用することができます。

QtのOpenGLとOpenGL ESサポートは、開発者がアプリケーション内に3Dグラフィックを統合することを助け、また、2Dレンダリングパフォーマンスを向上させるために、モダンなグラフィックスハードウェアを活用するためにも有効です。

デバイス非依存のカラーは、ARGB、AHSV、ACMYKの値か、共通の名前での指定をサポートしています。使用されるカラーカyンネルは、16ビット幅で、オプションで透明度を指定することができます。Qtは自動的にシステムパレットで要求された色を割り当て、または色制限のあるディスプレイで同様の色を使用します。

ペインティング

Qtは、ウィジェットとその他のペイントデバイス上への描画APIをプラットフォームに依存しない形で提供します。これは、プリミティブの描画同様に変形やクリッピングなどの高度な機能を提供します。すべてのQtのビルトインウィジェットは、自身の描画にQPainterを使用し、そして、プログラマーがカスタムウィジェトを実装するときにもこのクラスを使用します。

QPainter

QPainterは、点、線、楕円、円弧、ベジェ曲線、その他のプリミティブのための標準描画関数を提供します。ポリゴンとベクターパスのためのより複雑なペイント操作も含んでおり、詳細な描画は事前に準備を行うことでひとつの関数の呼び出しで行うことができます。テキストは、ペインターで直接描画することも、パスに組み込んで後に使うこともできます。

Qtのペンとシステムは、すべてのレンダリング品質を向上させる機能の数々も提供し、アルファブレンディング、ポーターデフコンポジションモード、アンチエイリアシング、そして線形、放射状、円錐形のグラデーションでの塗りつぶしなどを含んでいます。

警告: QWidget上でペイントする時、QPainterはpaintEvent()から呼び出す関数内またはpaintEvent()内でだけ使用できます; これは、ウィジェットにQt::WA_PaintOutsidePaintEventが設定されていない場合に限ります。Mac OS XとWindowsでは、この属性の設定にかかわらず、paintEvent()内でのみペイントできます。

void paintEvent(QPaintEvent *)
{
    QPainter doc(this);
    QLineF line(10.0, 80.0, 90.0, 20.0);
    doc.drawLine(line);
}

このコードはウィジェット上に黒い線を描画するでしょう。ブラシ、ペン、エイリアシングのための多くのメソッド(There are many methods)があります。

イメージ

Qtは、BMP、GIF、JPEG、MNG、PNG、PNM、TIFF、XBMとXPMを含む、いくつかのイメージの入力、出力、操作をサポートします。これらのクラスは、ペイントデバイスやインタラクティブグラフィカルアプリケーションで使用したり、後に使用するユーザーインターフェイスコンポーネントの前処理イメージのために使用したりできます。

QImageは、イメージの操作に使用され、様々な色深度とピクセルフォーマット間の変換が可能です。プログラマーは、ピクセルとパレットデータを操作でき、せん断や回転などの変形を適用し、必要ならばディザリングで色深度を減らすこともできます。アルファチャネルのサポートは、アプリケーションがイメージの合成や他の目的のために、透過とアルファブレンディングを使用することを可能にします。

これらのクラスで使用できるグラフィックスファイルフォーマットの範囲は、拡張プラグインメカニズムを使用して拡張することができます。


グラフィックスビューフレームワークは、ユーザーとの対話のためにハイクオリティレンダリングされた包括的な機能を組み込んだグラフィカルアプリケーションの作成を可能にします。

プリントデバイスとプリント

QPainterは、あらゆるペイントデバイスを操作できます。あらゆるサポートデバイス上でのペイントに必要なコードはデバイスにかかわらず同じです。

すべてのウィジェットはペイントデバイスです。Qtは、ペイント処理間のチラツキを減らすためにバッキングストア(裏に保存されたもの)を使用しています。適切に設定されたシステム上では、半透明や形のあるウィンドウを作成することができます。

QGLWidgetでのOpenGLサーフェイスの使用は、ペイントデバイスの標準のQPainterの呼び出しをOpenGLの呼び出しに変換し、適切にサポートされたハードウェアデバイス上で2Dグラフィックスの加速を可能にします。

イメージは、デバイス非依存のQImageと、ディスプレイに最適化されたQPixmapオブジェクトとして作成することができます。標準のイメージフォーマットファイルは、希望の色深度とピクセルフォーマットのイメージのレンダリングによって作成することができます。イメージは、さまざまなレベルの透過処理とカスタムウィジェットに特定のエフェクトを行うための描画を行うことができます。

ベクターとメタファイルフォーマットは、ペイントシステムによってサポートされています。QSvgGeneratorは、SVGファイルフォーマット内の対応する構造をペイントコマンドに変換することによってスケーラブルベクターグラフィックス(SVG)画像を作成します。QPictureは、ペイントコマンドのシーケンスを保持するために使用し、他のペイントデバイス上の描画やファイル出力時に再現することができます。

印刷は、物理的なプリンターを表すQPainterデバイスへのレンダリングによって行われます。Windows上では、ペイントコマンドはインストールされたプリンタードライバーを使用してWindowsプリントエンジンに送られます。Unix上では、PostScript®またはPortable Document Format (PDF)データは、プリントデーモンに送られます - これは現在のシステムのCommon Unix Printing System (CUPS)によって処理されます。

Qtの一般的なペイントAPIを使うことで、アプリケーションはすべての生成されたプラットフォーム上でPDFとPostScriptファイルを作成でき、アプリケーションは適したリーダーアプリケーションを使って見ることができるハイクオリティなドキュメントを作成することができます。

グラフィックスビューフレームワーク

Qtは、インタラクティブグラフィカルアプリケーションのために、2次元シーンの中に多数のアイテムを表示し管理する、強力で新しいフレームワークを導入しました。グラフィックスビューは、シーンに新しいアイテムを追加するためのオブジェクトベースのAPIと、定義済みアイテム作成のための簡易関数を含んだ従来のキャンバススタイルのAPIの両方を提供しています。

一度作成すると、アイテムは、シーン内の希望する位置、向き、スケールで配置できます。表示と管理機能はQGraphicsViewQGraphicsSceneに分割して実装され、同じシーン上の複数のビューやレンダラーの切り替えのサポートなどの機能を有効にします。

標準のアイテムタイプが提供され、それらはカスタムアイテムタイプを提供するためにサブクラス化して拡張することができます。アイテムは、シーンの上でのハイレベルコントロールを可能にするために、グループ化してまとめることができます。それぞれのシーン、ビューとアイテムは、 それら自身の座標系間で変形することを可能にする包括的な機能セットを提供します。標準及びカスタムアイテムの両方は、移動と選択を可能にでき、最小のコードで標準レベルのインタラクティブ性を持たせることができます。

グラフィックスビューは、アニメーションを考慮して設計されています: アイテムは、タイムライン上の特定の位置で定義された一連の変換に応じて変形される、アニメーションオブジェクトの作成のために使用することができます。

標準アイテムのいくつかは、グラフィックスビューフレームワークに、リッチテキスト編集、ウェブブラウジング、SVG画像の表示とシェイプの使用、パスとイメージのような、Qtの他の機能の一部を取り入れています。シーン上のアイテムは、すべてのアタッチされたビュートは独立して描画することができ、シーンのイメージファイルへのレンダリングとPDFファイルまたはプリンターへの印刷を可能にします。

フル機能のイベントモデルは、それらが必要とするアイテムのためだけにそれらをディスパッチする事によって、効率的にイベントを処理することができます。基本的なアイテム処理はフレームワークによって実行されるので、アイテムはもしそれらが環境について特定の情報が必要ならば、イベントへに応答する必要があります。

旧来のユーザーインターフェイスとインタラクティブなコンテンツを混在させる必要があるアプリケーションでは、QGraphicsProxyWidgetを使用してシーンに直接ウィジェットを組み込むか、またはQGraphicsWidgetで1からウィジェットのような要素を作成することができます。従来のユーザーインターフェイスのように、レイアウトマネージャーはシーン内でウィジェットとアイテムを配置するために使用することができます。


SVG描画はQtでサポートされたあらゆるペイントデバイス上に描画することができます。

スケーラブルベクターグラフィックス(Scalable Vector Graphics (SVG))

SVGは一般に2次元のWebベースのグラフィックスに関するグラフィカルアプリケーションを記述するXMLベースの言語とファイルフォーマットです。Qt内のSVGサポートは、SVG 1.1規格、World Wide Web Consortium (W3C) 勧告に基づいて、タイニープロファイル(Tiny profile) 1.1と1.2をサポートするための追加機能を提供しています。

Qtは、画像とOpenGLウィジェットを含む任意のペイントデバイス上へSVGを描画できます。これは柔軟に開発者に速度と質をトレードさせます。SVG描画は、標準のユーザーインターフェイスコントロールのアイコンを作成することもでき、定義済みのサイズの範囲でビットマップを生成する必要をなくします。

開発者は、少ない付加労力でアプリケーションで使用したグラフィックスをエクスポートすることができ、特殊なSVGペイントデバイス上に描画するためにQPainterの関数を使ってSVGを生成することができます。

3Dグラフィックス

OpenGLは、GUIアプリケーションに3Dグラフィックスを含めるためにQt開発者使用することができる3Dグラフィックス描画の標準APIです。QtのOpenGLモジュールは、Windows、X11とMac OS X上で利用可能で、それぞれのシステムのOpenGLライブラリーを使用します。

Qtアプリケーション内でOpenGLを使うためには、開発者はQGLWidgetをサブクラス化してその上に標準のOpenGL関数で描画するだけですQtは、開発者がそれらのアプリケーションに一貫したユーザーインターフェイスの提供することを助けるために色の値をOpenGLの色形式に変換する機能を提供します。

Qtは、Qtアプリケーション内から便利に使用するためのOpenGL機能とエクステンションを使用することができます便利な関数は、イメージからテクスチャーの作成を可能にし、適切なクラスによって提供されたピクセルバッファーとフレームバッファーをサポートします。サンプルバッファーのような機能のサポートは、基盤となるプラットフォーム上で利用可能ならば有効にすることができます。

2Dアプリケーションは、 適切なハードウェア上でレンダリングパフォーマンスを向上させるためにQGLWidgetをサブクラス化して使用することができます。このように使用する場合、通常のQPainterの操作はOpenGL呼び出しに変換されます。これはまた、純粋なOpenGLを使用した3Dシーン上でオーバーレイコントロールと装飾を可能にします。組み込みプラットフォーム上では、ハードウェアアクセラレーションが限られており、この場合ペイントエンジンは可能な限り多くのデバイスで動作するように、OpenGL ES 2.0の機能を使用するように制限されています。

適切なハードウェア上での、アンチエイリアスレンダリングサポートは、OpenGLペイントエンジンを使用して生成されたグラフィックス品質とレンダリング速度の両方を向上することができます。要求を満たさないハードウェアでは、開発者は、実行時にユーザーにレンダリングオプションを公開することによってクオリティーと速度の両方の選択をユーザーに与えることができます。

マルチメディア

Qtは、クロスプラットフォームAPIで一貫した使い方でアクセスできるメディアプレイバック機能を提供するために、KDEプロジェクトから発信されるオープンソースプロジェクトである、Phononマルチメディアフレームワークを使用します。Qtは、Linux/Unix、Windows、Mac OS X上のアプリケーションが各プラットフォームに適したマルチメディアフレームワークを透過的に使用することを保証します - これは、アプリケーションがオーディオとビデオのコーデックとフォーマットのプラットフォーム固有のサポートを活用することを意味します。

Phononの機能は、Qtによって提供されたテクノロジー内に統合することができます。例えば、グラフィックスビューフレームワークを使用してレンダリングされたシーンとWebKitブラウザーエンジンで表示されたWebページはムービーウィジェットに追加することができます。

マルチメディアの追加クラスは、QtMultimediaモジュールに含まれています。これらのクラスは、オーディオとビデオのデータへのローレベルアクセスを提供することに重点を置いています。

オンラインリソース

http://qt.nokia.com/doc/latest/qpainter.html [qt.nokia.com] http://qt.nokia.com/doc/latest/graphicsview.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/opengl.html [qt.nokia.com] http://qt.nokia.com/doc/latest/qtmultimedia.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/qtsvg.html [qt.nokia.com] http://qt.nokia.com/doc/latest/phonon-overview.html [qt.nokia.com]

アイテムビュー

Qtのアイテムビューウィジェットは、大きなデータの表示と変更のために標準的なGUI制御を提供します。モデル/ビューフレームワークに基づいたデータの分離方法は、同一のデータのユーザーへの提示、データ共有などの機能、ソートとフィルタリング、複数のビュー、ユーザーへの複数データの提示をデータの格納方法と分離します。

データ量の大きな処理するアプリケーションを作成する時、開発者は、一般に素早く効果的にデータのアイテムを表示するために”アイテムビュー”ウィジェットに頼ります。現代的なツールキットに見られる標準的なアイテムビューは、単純なアイテムのリストを含むリストビュー、アイテムの階層的リストのツリービュー、スプレッドシートアプリケーションのようなレイアウト機能を提供するテーブルビューが含まれています。


Qtは、アイテムのツリー、リスト、テーブルのための標準アイテムビューを提供します。

Qtのアイテムビュークラスは、2つの違った形式で利用できる: 従来のアイテムビューウィジェットとモデル/ビューコンポーネントとして。従来のリスト、テーブル、ツリーウィジェットは、開発者によって明示的に生成されたアイテムオブジェクトの管理をアイテムビュー自身に含んでいます。

標準のアイテムビュー

リストウィジェット、アイコンビュー、ツリーウィジェットおよびテーブルの標準的な実装はQtによって供給されます。これらは、同一のビューと異なるビュー間でのドラッグアンドドロップ操作をサポートしています。すべてのQtウィジェットと同様に、それらはQtのリソースシステムに完全に統合されています。

アイテムビュークラスは、Qtのさまざまな標準ダイアログでデータ表示に使用され、Qt DesignerQt Assistant、及びQt Linguistで広範囲に使用されています。

従来のアイテムビューは、データの一部をカプセル化するために個々のオブジェクトを使うアーキテクチャーを使用し、通常データの数百アイテムの表示と管理に使われます。このアプローチは既存のQt開発に馴染みがあり、適度な量のデータを処理するリッチユーザーインターフェイスを素早く構築する便利な方法を提供するためにあります。

一貫性と信頼性のために、従来のアイテムビューは、Qtのモデル/ビューフレームワーク上に構築され、アイテムビューデータの処理のためにスケーラブルでカスタマイズ可能な方法を提供します。

Qtのモデル/ビューフレームワーク

Qtの的供するモデル/ビューフレームワークは、Qtのアイテムビューに特化したよく知られているモデル-ビュー-コントローラーパターンの一つです。このアプローチでは、モデルはユーザーのためにデータアイテムをビューへ表示し、他のコンポーネントへのデータの供給のために使われ、またデリゲートがレンダリングと編集プロセスを処理します。


モデル/ビューフレームワークのコンポーネント指向アーキテクチャーは、アイテムビューのカスタマイズを容易にします。

モデルは、QAbstractItemModelによって提供される標準インターフェイスに従って書かれたデータソースのラッパーです。このインターフェイスは、オリジナルデータソースの性質のかかわらず、モデルを通して供給されるデータにアクセスするためにQAbstractItemViewから派生されたウィジェットを有効にします。

このデータとその提示間の分割は、従来のアイテムビューに多数の改善を提供することを可能にします:

モデル/ビューシステムは、非データベース開発者が、簡単にデータベースを統合するために、QtのSQLモデルを使うこともできます。

オンラインリソース

http://qt.nokia.com/doc/latest/model-view-programming.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/examples.html [qt.nokia.com]

テキスト処理

Qtは、リッチテキストドキュメントの作成と編集をユーザーが行うためのパワフルなテキストエディターウィジェットを提供し、印刷用のドキュメントの準備のために使用することができます。エディタによって使われるドキュメントの基本構造は、開発者が完全にアクセス可能で、ドキュメントの構造と内容の両方を操作することが可能です。

リッチテキストドキュメントは、通常、様々なフォント、色、及び一連の段落になったテキストを含んでいます。テキストは、リストとテーブルを使って編成することもでき、フレームを使うことによってドキュメントの本体から分割して表示することができます。各ドキュメント要素の外観は、リッチテキストAPIを通して開発者によって利用できる多くのプロパティを使って正確に調整することができます。


Qtの高度なリッチテキストドキュメント機能は、QTextEdit内で複雑なドキュメントの作成と編集をすることができます。(左)ドキュメントは、対応したドキュメントプロセッサーで使うためのOpenDocumentフォーマットでエクスポートすることができます。(右)

リッチテキスト編集

対話的なリッチテキストの表示と編集は、QTextBrowserQTextEditウィジェットによってQt内で処理されます。これらのウィジェットは完全にUnicodeをサポートし、リッチテキストの作成のために中間のマークアップ言語を使う必要を無くし、QTextDocumentによって提供されたドキュメント構造上に構築されます。QTextDocumentは、HTML 4.0のサブセットのインポートとエクスポートのサポートと、完全なアンドゥ/リドゥ機能(グルーピング操作を含む)と、リソース処理も提供します。

Qtは、ドキュメントへのオブジェクトベースのAPIを提供することで、開発者がそれらの構造のハイレベルな情報を取得するのを助けます。カーソルベースAPIは、ドキュメントの調査、処理および変換を便利にするために提供されています。構造と内容に対応したクラスに加えて、テキストの外観とドキュメント要素を制御するいくつかのクラスがあります。ドキュメントに目的の外観を与えるためにテーブル、リスト、フレーム、および一般の段落のテキストスタイルをカスタマイズすることができます。

プログラム的に作成されたドキュメントは、QTextEditで編集可能で、完全なアンドゥ/リドゥ履歴を管理します。開発者は、ユーザーが独自の構造や内容を追加するために利用可能な標準の編集機能を拡張することができます。

カスタマイズ、ドキュメントの印刷とエクスポート

Qtのテキスト処理機能は、カスタムウィジェットとリッチテキストドキュメントに特化したテキストを提供するために使用することもできます。これらは、行ごとのテキストレイアウトのためにQTextLayoutのようなローレベルクラスを使用して書くこともでき、QTextEditと共にQTextDocumentを使うことによって提供される拡張可能なテキストレイアウトシステム内に統合されます。

構文強調表示ルールは、QSyntaxHighlighterクラスでリッチテキストドキュメントに適用することができます。これは、標準のQTextEditウィジェットのコードエディターのベースとして使用でき、またドキュメント検索ツールの強調表示機能を提供します。

ドキュメントは、QPrinterでの印刷に適した一連のページをQPrintDialogから取得された情報に応じてフォーマットすることもできます。

QTextDocumentWriterクラスは、HTML、プレーンテキストとオープンドキュメントフォーマット(ODF)ファイルのサポートを提供します。このクラスは、汎用的なAPI経由で機能を公開していて、将来のリリースで追加フォーマットをサポートするために拡張するようにデザインされています。

オンラインリソース

http://qt.nokia.com/doc/latest/qt4-scribe.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/richtext.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/qtextdocumentwriter.html [qt.nokia.com]

WebKitでのWeb統合

QtのWebKitブラウザエンジンの統合は、開発者に、QtスタイルのAPIの使用とウェブコンテンツの表示と対話のためのパラダイムによって、アプリケーション内にウェブ機能の導入を可能にします。

Qtは、安定性とパフォーマンスにフォーカスした、完全な機能のオープンソースウェブレンダリングエンジンであるWebKitの統合サポートを含んでいます。Qtは、HTML 4.01、XHTML 1.1、CSS 2.1とJavaScript 1.5を含む多くのウェブ標準をサポートしたWebKitのバージョンが付属しています。より高度な機能も利用可能です - これらは、WebKit in Qt [qt.nokia.com] ホワイトペーパーで示されています。

WebKitのネットワークは、Qtのネットワーククラスを使って透過的に処理され、Secure Sockets Layer (SSL)とプロクシをサポートするHTTP 1.1完全準拠のブラウザコンポーネントを提供します


Qtのウィジェットは、Qtに統合されたWebKitと共に表示されたウェブページ内に組み込むことができます; ウェブページは、グラフィックスビューフレームワークのアイテムとして表示することができます。

ネイティブアプリケーションの統合

QtのWebKitへのサポートは、Qtのパラダイムを使用したアプリケーションのためにWebKitの機能を晒す事によって単なるHTMLのレンダリングを越えています。例えば、Qtのシグナルとスロット通信メカニズムへのサポートは、開発者がウィジェットと他のアプリケーションオブジェクトへウェブコンポーネントを接続することを簡単にします。

逆に、Qtとブラウザーエンジン間の統合は、ウェブページ内にネイティブなQtのコントロールを含めることを可能にし、ネイティブユーザーインターフェイスの高いダイナミックさとウェブコンテンツを組み合わせることが可能になります。

WebKitはウェブアプリケーションが永続的なデータにネイティブストレージを使うことを可能にし、この機能はQtによってサポートされています。開発者は、リモートサービスと相互運用のアプリケーションにネイティブストレージを有効にし、ユーザーのシステム上で適切な位置とクォータをセットするために構成オプションを活用することができます。

DOMアクセスAPI

ウェブページの構造を操作するための標準的な方法は、Document Object Model(DOM) APIを通して行われます。QtのWebKit統合は、ページ構造のアクセスと操作のためのとてもシンプルな方法を提供するW3CセレクターAPIの実装が含まれています。

このAPIによって、開発者が、CSSセレクター知識を再利用してのDOMアクセスが直感的になり、結果としてメンテナンスやフットプリントのオーバーヘットが少なくなります。

ネットスケーププラグインサポート

ネットスケーププラグインAPI準拠のプラグインは、サードパーティーのブラウザーコンポーネントのデファクトスタンダードで、Qtに統合されたWebKitによってレンダリングされたウェブページに埋め込みや表示をすることができます。この機能の設定は、ウェブ環境のためにアプリケーションによって公開されたウィジェットプラグインのような、他の種類のプラグイン設定のためにも使われ、Qtのクラスを通して実行されます。


サードパーティーのブラウザープラグインは、ネットスケーププラグインAPIを通してQtとWebKitによってサポートされています。

Online References

http://qt.nokia.com/doc/latest/qtwebkit.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/demos-browser.html [qt.nokia.com]

http://qt.nokia.com/forms/whitepapers/reg-whitepaper-hybrid/ [qt.nokia.com]

データベース

QtのSQLモジュールは、クロスプラットフォームのGUIデータベースアプリケーションを簡単に作成できます。プログラマーは、SQLステートメントの実行や、視覚化とデータ入力目的のアイテムビューに情報を供給するためにデータベースモデルを使用し、フォームベースのユーザーインターフェイス内の特定のウィジェットのためにデータベーステーブルを関連付けるウィジェットマッパーを使うことができます。

QtのSQLモジュールは、SQLデータベースにアクセスするためのクロスプラットフォームインターフェイスを提供し、Oracle、Microsoft SQL Server、Sybase Adaptive Server、IBM DB2、PostgreSQL、MySQL、Borland Interbase、SQLiteとODBCのためのネイティブドライバーを含んでいます。ドライバーは、クライアントライブラリーが利用可能な、Qtでサポートされているすべてのプラットフォーム上で動作します。アプリケーションは、同時に複数のドライバーを使って複数のデータベースにアクセスすることができます。Qtのディストリビューションは、SQLiteデータベースを含み、QtのSQLモジュールは、デフォルトでこのデータベースをサポートするようにビルドされています。

開発者は、任意のSQL文を簡単に実行できます。Qtは、自動的に適切なSQL文を生成して使用することもできるハイレベルのC++インターフェイスも提供します。

Qtは、他のモデル/ビューコンポーネントと共に使うためのSQLモデルのセットを提供します。これらは、データベースクエリーの結果を自動的に格納するためのビューウィジェットを有効にし、ユーザーと非データベース開発者両方に編集のプロセスを簡略化します。

SQLモジュールの提供する機能の使用は、外部キーの参照と主従関係の提示を使用したデータベースアプリケーションの作成を簡単にします。

SQLコマンドの実行

QSqlQueryクラスクラスは、任意のSQL文の直接実行と、SELECT文によって生成された結果セットのナビゲートのために使用されます。INSERT、UPDATEとDELETE文の使用も同様に簡単です。

QtのSQLモジュールは、値のバインディングと準備済みのクエリにも対応しています。値のバインディングは、名前でのバインディングと名前でのプレースホルダーを使うか、位置のバインディングまたは位置のプレースホルダーを使って行うことができます。Qtのバインディング構文は、基礎になるデータベースのサポートまたはエミュレーションのどちらかによって使用され、すべてのサポートされたデータベースと共に働きます。

SQLモデル

Qtは、モデル/ビューフレームワーク内で他のコンポーネントと共に使用する多くのモデルクラスも提供しています。これらは、開発者がデータベースからのデータアイテムと共にテーブルビューを自動的に提供するためのSQLクエリー設定を可能にします。

データベースと他のコンポーネントのモデル/ビューフレームワークでの使用は、開発者への仕事の要求を最小限にします。クエリーモデルの設定は、クエリーの指定とヘッダー選択のための調査の問題を簡潔にし、クエリー結果の表示のためのテーブルビューの設定も同様に簡単になります。

モジュールは、様々な方法でSQLテーブルへのアクセスを提供します。これらは、SQL結果セットへの読み取り専用データモデル、一つのデータベーステーブルへの編集可能データモデル、そして他のデータベース内に外部キーとしてセットする事が可能なリレーショナルモデルを含んでいます。図が示すQt Booksのデモは、テーブル内の本のそれぞれについての情報を探すためにリレーショナルデータベースモデルを使用しています。

モデル/ビューフレームワークは、データベースアプリケーションの要求に対応する機能の多くを含んでいます。これらはトランザクションのサポートと、不要にデータベースを往復するのを避けてテーブルの内容を行単位の編集するためのオプションを含んでいます。


Qt Booksデモは、QtのSQLクラスとモデル/ビューフレームワーク間の統合を示します。

データ対応ウィジェット

モデルからのデータ取得を可能にするためのQtの提供する機能は、上記のSQLモデルのように、ウィンドウ内の指定したウィジェットに関連させるために、ユーザーが基準格納データの異なる位置から利用可能データのクロスセクションでの参照を可能にします。これは、従来のフォームベースユーザーインターフェイスとともにデータ入力アプリケーションの作成を容易にします。

QDataWidgetMapperクラスは、モデルとウィジェットの選択間のマッピングを設定するために使用されます。Qtと共に供給されるBooksデモ(上図参照)では、データマッパーを構築しそしてモデルに割り当てられ、そしてデータベース内のフィールドを編集するために使用される各ウィジェットは列にマップされます。

データマッパーは、指定のウィジェットに各列のアイテムをマッピングし、そして取得されたデータの表示のためにそれを使用して、モデル内の行を1行ごと指定して直接使用することができます。ナビゲーション関数は、マッパーに使いやすいナビゲーションコントロールを接続することを容易にします。

クラスもアイテムビュークラスに同様のAPIを提供しているので、異なるモデルのクロスセクションをマッパーの設定の変更によって取得することができます。モデル/ビューAPIの使用でも、データマッパーの基礎データの変更への応答を可能にします。Booksデモは、ゆーざーがテーブルビューの異なる行を選択するたびにマッピングを更新します; この動作は、単純なシグナル-スロット接続で設定されます。

オンラインリソース

http://qt.nokia.com/doc/latest/qtsql.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/qt4-sql.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/examples.html [qt.nokia.com]

国際化

Qtは、国際標準文字セットのUnicodeを完全にサポートしています。プログラマーは、Unicodeサポートされたアプリケーションによって、アラビア語、英語、ヘブライ語、日本語、ロシア語、そしてその他の言語を自由に組み合わせることができます。Qtは、翻訳とローカライズをサポートしたアプリケーションのためのツールも含んでいます。

Qtは、APIと内部両方にUnicodeバージョン5.0文字エンコーディングサポートとUnicode文字列保存のためのQStringクラスを使用しています。

テキストコーデックセットの拡張性は、異なるエンコーディングとキャラクターセットのサポートを提供し、中国語用のBig5とGBK、日本語用のEUC-JP、JISとShift-JIS、ロシア語用のKOI8-R、そして標準エンコーディングのISO-8859シリーズを含んでいます。Qtは、フォントと入出力そしてインプットメソッドでテキストコーデックを使用します。

ロケールサポートの組み込みは、ユーザーの地理的な位置と言語設定に適切に合った、数値から文字列および文字列から数値への変換を可能にします。

Qtは、翻訳プロセスを容易にするためのツールセットを含み、それらはXML Localization Interchange File Format (XLIFF)、GNU Gettext POフォーマットとQtのTranslation Source (TS)ファイルをサポートしています。

テキスト入力とレンダリング

極東のライティングシステムは、キーボードで利用できるより文字よりも多くの文字を必要とします。実際の文字のためのキー押下シーケンスからの変換は、インプットメソッドと呼ばれるソフトウェアによってウィンドウシステムレベルで実行されます。Qtは、ユーザーのシステムにインストールされたインプットメソッドを自動的にサポートします。

Qtは、画面上のすべてのテキストのために、特殊な改行処理、双方向の記述、そして発音区別符号のような高度な機能をサポートする強力なテキストレンダリングエンジンを提供します。それは、アラビア語、中国語、キリル語、英語、ギリシャ語、ヘブライ語、日本語、韓国語、ラテン語、そしてベトナム語を含む世界の書記体系の大部分を描画します。Qtは、複数言語のテキスト描画のためにインストールされたフォントを自動的に組み合わせます。

アプリケーションの翻訳

Qtは、ユーザーのネイティブ言語でアプリケーションを提供する開発者のためのツールと機能を提供します。Qt Development Frameworkはフランス語、ドイツ語、そして簡体字中国語の翻訳を提供するために、Qt自体にユーザー向けのおよそ数百の文字列を含んでいます。

翻訳可能な文字列を作成するために、開発者はtr()翻訳関数を呼び出してそれらを単純にラップし、特別なCとC++コメントで翻訳者に付加情報を提供することができます。

//: This name refers to a host name.

hostNameLabel->setText(tr("Name:"));
 
/*: This text refers to a C++ code example. */
 
QString example = tr("Example");

文脈と共に、このコメント情報は翻訳者が表示文字列を正確に翻訳する助けになります。複数の翻訳形式での支援のためにオプション引数を使用することもできます。

Qtは、Qtプロジェクト内のファイルから表示するソーステキストの抽出、共通翻訳ファイルフォーマット間での変換、そしてアプリケーションで使用するメッセージの圧縮を行うためのツールを提供します。ソーステキストの抽出と部分的に完了した翻訳の更新プロセスは、Qtアプリケーションのビルドシステム内に統合され、異なる翻訳ワークフローに合わせて変更することができます。

実行時に、アプリケーションは、翻訳ファイルを読み込むためにQTranslatorオブジェクトを使用します。各ファイルは、特定の言語への翻訳ファイルを含んでいます。言語は、ロケールまたはユーザー設定に従って実行時に選択されます。

翻訳者は、GUIアプリケーションの翻訳作業で、Qt Linguistを使って簡単に翻訳ファイルを編集できます。コンテキストは、アプリケーションウィンドウの左側にリストされ、現在のコンテキストのソーステキストリストは、翻訳と現在の状態(未完了、廃止、完了)と共に右上領域に表示されます。ユーザーインターフェイスは、キーボードで操作可能です; そのドッキング可能ウィンドウは、翻訳者の設定に合わせて編成することができます。

アプリケーションは、しばしば異なるソーステキストで何度も同じフレーズを使うことがあります。Qt Linguistは、以前に翻訳された文字列と定義済みの翻訳を基にした推測をインテリジェントに推測して自動的に表示します。一般的な翻訳は、より効率的に将来のアプリケーション翻訳をするために、熟語帳(phrasebooks)に保存することもできます。Qt Linguistは、アクセラレーターと末尾の句読点が正しく翻訳されたことを確認するために任意に翻訳を検証できます。

Qt Linguistの包括的なマニュアルは、リリースマネージャー、翻訳者、そしてプログラマーへ翻訳プロセスについての関連情報を提供します。


Qt Linguistでのフランス語と簡体中国語の同時翻訳作業。

オンラインリソース
http://qt.nokia.com/doc/latest/i18n.html [qt.nokia.com] http://qt.nokia.com/doc/latest/linguist-manual.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/unicode.html [qt.nokia.com] http://qt.nokia.com/doc/latest/qtextcodec.html [qt.nokia.com]

Qt Script

Qt Scriptは、Qtアプリケーションで使用することができるECMAスクリプトベースの言語です。QtScriptモジュールは、スクリプト環境にアプリケーションの一部を簡単にエクスポートできるAPIを提供し、シグナル-スロット通信と他の標準Qt機能のサポートを含みます。

アプリケーションスクリプトは、ユーザーに、ユーザー志向スクリプト言語にシンプルなAPIでアクセスすることによって、アプリケーション機能をカスタマイズと拡張を可能にします。伝統的に、Qt開発者は、アプリケーションにスクリプトサポートを提供するために、様々な独立した方法を使用しています。Qt Scriptを含むQtモジュールは、スクリプトの実装に必要な労力を軽減するように意図され、単にそのまま使用できるスクリプトが必要な開発者の作業を簡単にします。

スクリプティングアーキテクチャー

QtScriptモジュールは、QScriptEngineQScriptValueクラスなどをベースにしたAPIを提供します。これらは、実行とデータマーシャリング機能を提供します。

QScriptEngineのインスタンスは、スクリプト環境内でQt Scriptを実行する役割を行い、この環境のためにQObjectインスタンスのサブクラスを公開する機能を提供します。加えて、QScriptEngineは、Qt Scriptと同様にC++データタイプを変換し、スクリプト環境内に挿入することが可能です。Qt Scriptデータタイプは、C++タイプにデータを変換する関数を提供するQScriptValueインスタンスとしてC++内で示されます。

加えて、シグナルとスロットは、Qt Scriptとアプリケーション間の通信のために使用することができます。Qt Scriptオブジェクトは、それらをラップしたオブジェクトのシグナルをエミットでき、そして任意のQt Script関数はスロットとして使用することができます。これは、スクリプト作成者の要求と動的スクリプト言語からの期待を柔軟な付加的レベルで提供します。

QtScriptモジュールの最も単純な使用方法は、 ユーザー定義コードを実行するQt Scriptにインタープリタを提供することです。

QScriptEngine engine;
 
QScriptValue result = engine.evaluate(userCode);

QScriptEngineのインスタンスは、何らかの構文とランタイムに発生したエラーについての情報を提供することもできます。

上図では、アプリケーションの中にQt Scriptを統合してQtScriptモジュールの機能を使用する様子を見ることができます。様々な関数とプロパティの提供するイメージのQObjectベースのラッパーは、次のようにスクリプト環境に公開されます:

image = new ImageWrapper(this);
 
QScriptValue imageObject = engine.newQObject(image);
 
engine.globalObject().setProperty("image", imageObject);

一度環境で定義されれば、ユーザーは、アプリケーションのユーザーインターフェイスを管理するすべての低レベルな詳細を隠した簡略化されたAPI使用してイメージを操作することができます。


Qt Scriptのユーザーインターフェイスを使った関数のデバッグ。

デバッグ

スクリプトのデバッグへのサポートは、スクリプトが利用できるアプリケーションを作成する時に開発者が使用できるグラフィカルなコンポーネントの統合されたセットを含む、QtScriptToolsモジュールによって提供されます。

QScriptEngineDebuggerクラスは、簡単に使用できるように設計されています。デバッガとスクリプトエンジンの実装間の分離は、デバッガにアタッチされたプロセスは、シンプルで非侵襲的であることを意味しています; スクリプトエンジンのためにデバッガにアタッチされたコードは、自己完結していて不要になったら削除することができます。

デバッガは、実行しているスクリプトについてのソースコード、ブレークポイント、変数の内容を表示する共通ウィジェットのセットを提供します。これらは、標準ウィンドウ(図参照)または個別のウィジェットとして一緒に使用することができます。

これらのウィジェットに加えて、デバッガーは、カスタムデバッグインターフェイスを作成するために別々に使用できる標準のメニューとツールバーも提供します。ツールバーには、スクリプトの実行制御のためにプログラム的にトリガーすることができるアクション(Action参照)にリンクされたボタンのセットが含まれています。

必要ならば、デバッガーは、ユーザーインターフェイスコンポーネントのどれかを非表示で使用することができます; 開発者は、エラー発生またはブレークポイントに来るまでそれらを非表示にするオプションを使用できます。

包括的なユーザーマニュアルドキュメントは、デバッガーのユーザーインターフェイスの使い方と、デバッグコンソールで入力できるコマンドの情報を含んでいます。

Online References

http://qt.nokia.com/doc/latest/qtscript.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/qtscripttools.html [qt.nokia.com]

スタイルとテーマ

Qtは、自動的にアプリケーションのルックアンドフィールにネイティブデスクトップスタイルを使用します。Qtアプリケーションは、カラー、フォント、サウンドと他のデスクトップ設定のユーザー設定を尊重します。Qtプログラマーは、供給された任意のスタイルを自由に使用し、任意の設定にオーバーライドできます。プログラマーは、既存のスタイルの変更や、Qtの強力なスタイルエンジンを使って独自のスタイルを実装できます。

スタイルは、特定のプラットフォーム上のユーザーインターフェイスの"ルックアンドフィール"を実装します。スタイルは、フレーム、ボタン、イメージの描画のような基本的な描画関数を実装するQStyleのサブクラスです。Qtは、最大速度と柔軟性ですべてのウィジェット自体の描画を行います。

組み込みスタイル

Qtは次の組み込みスタイルを提供します:CDE、Cleanlooks、GTK、Motif、Mac OS X、Plastique、Windows、Windows XP、そしてWindows Vista。デフォルトでは、Qtはユーザーのプラットフォームとデスクトップ環境に適したスタイルを使用します。スタイルは、アプリケーション開発者によってプログラム的に、または、-styleコマンドラインオプションでユーザーが選択することもできます。


異なるネイティブスタイルのコンボボックス

スタイルは、ユーザーのカラー、フォント、サウンドなどの設定を含むユーザーのデスクトップ設定によって補完されます。Qtは、コンピューターのアクティブなテーマに自動的に適応します。例えば、Qtは、メニューとツールチップにスクロールとフェードトランジションエフェクトをサポートします。

WindowsとMac OS Xスタイルは、ネイティブスタイルマネージャー上で構築され、それぞれのプラットフォーム上でのみ利用可能です。他のスタイルは、Qtによってエミュレートされ、どの環境でも利用できます。

多くのモダンなX11プラットフォーム上のデフォルトスタイルは、GNOMEデスクトップ上のGTK+テーマエンジンを使った、KDEとGTKのPlastikウィジェットスタイルにインスパイアされたPlastiqueです。GTKベース環境の代替スタイルは、GNOMEのClearlooksテーマのようなスタイルにデザインされたClearlooksです。

Qtの組み込みウィジェットは、スタイル対応です。カスタムウィジェットとダイアログは、ほとんどが組み込みウィジェットとレイアウトの組み合わせで、使用されているスタイルに自動的に対応します。カスタムウィジェットをスクラッチから書く必要がある稀な場合は、開発者は、直接グラフィックスプリミティブをそのまま描画するよりも基本的なユーザーインターフェイス要素を描画するためにQtのスタイルAPIを使用することができます。

読み込んだファイルに基いて、Qtアプリケーションは、右から左のウィジェットレイアウトではなく、通常使用されるデフォルトの左から右スキームを自動的に使用します。加えて、反転モードを使った時、行儀の良いスタイルは、ユーザーのデスクトップ環境に適切な光と影領域を持つウィジェットをレンダリングします。

ウィジェットスタイルシート

Qtは、ほとんどすべての標準ウィジェットでウィジェットスタイルシートの使用をサポートしています。これらの、カスケードスタイルシート(css)に似た言語で書かれたテキストの記述は、WWWブラウザーにレンダリングするHTMLをカスタマイズするために使用されるCSSの記述と同様の方法でウィジェットの外観をカスタマイズします。各ウィジェットのスタイルシートは、styleSheetプロパティを通してアクサスされ、QWidgetとそのサブクラスで利用でき、そしてアプリケーション実行中にスタイル対応ウィジェットに簡単にカスタマイズを適用することを可能にします。標準のウィジェットをカスタマイズする必要がある多くの共通した場面で、スタイルシートの使用は、カスタムスタイルを各必要をなくすことができます。


Style Sheetサンプルは、スタイルシートのインタラクティブな実験が可能です。

カスタムスタイル

カスタムスタイルは、アプリケーションまたはアプリケーションファミリーの全く違う外見を提供するために使用します。カスタムクラスは、QStyleのサブクラス化かその任意のサブクラスによってで意義することができます。それは、適切なベースクラスから一つまたは二つの仮想関数を再実装することによって既存のスタイルに小さな変更をして簡単に作成できます。

スタイルAPIは、コンポーネントの描画のために使われるコンポーネントの各内容についての情報を提供し、高度にカスタマイズされたスタイルの作成と微調整を可能にします。

スタイルは、プラグインとしてコンパイルすることもできます。プラグインは、QtまたはQt Designer自身どちらでも再コンパイルせずにQt Designerでカスタムスタイルを使うフォームのプレビューを可能にします。Qtアプリケーションの既存のスタイルは、アプリケーションの再コンパイルなしにスタイルプラグインを使って変更することができます。これは、それぞれの利用可能なスタイルにプレビューを提供するためにオンザフライでスタイルを切り替えるQt Stylesサンプルやqtconfigツールのようなアプリケーションを可能にします。

オンラインリソース

http://qt.nokia.com/doc/latest/widgets-styles.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/stylesheet.html [qt.nokia.com]

インプット/アウトプットとネットワーク

Qtは、プレーンテキスト、XML、そしてバイナリーフォーマットでデータのロードとセーブができます。Qtは、ローカルファイルは自身のクラスを使用し、リモートファイルはFTPとHTTPプロトコルを使用して処理します。プロセス間通信とソケットベースのTCPとUDPネットワークは、完全にサポートされ、利用可能なネットワークインターフェイスについての情報は、簡単に取得することができます。

ファイル処理

Qtのデバイス処理基板の中核は、ファイル、ソケット、そして他のデバイスの一般的なベースクラスであるQIODeviceで、これはカスタムデバイスのサポートを追加するためにサブクラス化することができます。すべてのデバイスは、シグナルとスロットを使って通信可能で、アプリケーション内でファイルとネットワーク通信の統合を容易にします。

QFileクラスは、ラージファイル、ロングファイルネーム、国際化ファイル名をサポートします。QDirQDirIteratorクラスは、ディレクトリーの読み取りと横断が可能で、パス名の操作、ディレクトリーの作成、ファイルの削除、そして他の一般的な操作の実行のために使用することができます。QFileInfoは、サイズ、パーミッションや最終更新時間などのファイルについてのより詳細な情報を提供します。

Qtは、任意のデバイス上で動作する標準iostreamクラスに似たクラスを含んでいます。テキストと生データストリームのためのクラスは、テキストストリームへの出力とデバイスからの入力に使用され、それらはQTextCodecによって提供されるエンコーディングをサポートします。データストリームは、プラットフォーム非依存のバイナリーフォーマットの多くのQt型と標準のC++型のシリアライズのために使用することができます。

リモートファイルへの透過的アクセスは、統一されたネットワークアクセスAPIを通して提供され、必要ならばHTTPとFTPプロトコルの特別なクラスを通して利用することもでる、Qtのネットワーキングクラスの上に構築されます。QUrlクラスを使用することによって、URLのパースと再構築を簡単に行うことができます。

ファイルのいくつかのタイプでは、QFileオブジェクトを使用しないで直接読むことができます。例えば、画像ファイルは、普通QImageクラスとその拡張プラグインを通して読み込まれます。テキストと画像の印刷は、QPrinterによって処理されます。

Qtは、他のアプリケーションとサービスによって変更されたファイルとディレクトリーを監視するために使用することもできます。QFileSystemWatcherクラスは、監視するために必要なファイルパスの登録をする事によって動作し、これらのパスのファイルとディレクトリーが変更されるたびにシグナルをエミットします。

XML

QtのXMLモジュールは、SAXパーサーとDOMパーサーを提供し、両方共整形されたXMLを読み込みますが、検証は行いません。SAX(Simple API for XML)実装は、SAX2 Java実装の設計と命名規則に対応しています。DOM(Document Object Model) Level 2の実装は、ネームスペースのサポートを含むW3C勧告に対応しています。

Qtのストリーム読み書きクラスは、XMLファイルのトークンのインプットストリームからの"プル"とアウトプットストリームへの"プッシュ"での読み書きのための代替手段を提示します。これらのクラスの設計は、XMLベースのファイルフォーマットのためのハイレベルで軽量なパーサーを書くことを容易にします。

XQuery 1.0とXPath 2.0を含む、より高レベルなXML操作は、追加モジュールによって提供されます。この、標準のXML処理と強力な問い合わせ機能の分離は、アプリケーションで使用するXMLサポートのレベルを開発者が決めることを可能にします。XSLT 2.0への部分的サポートは、共通XMLテクノロジーに慣れた開発者のための他の処理オプションを加えます。

XMLドキュメントの検証は、XMLスキームを表すクラスとそれらのスキームのためのバリデーターによって実行されます。これらは、標準のバージョン1.0によって指定されたW3C XML Schema仕様で実装されます。

プロセス間通信

Qtの提供するプロセスクラスは、外部プログラムの開始とそれらとのプラットフォーム非依存の方法で通信するために使用されます。通信は、外部プログラムの標準入力への書き込みとその標準出力と標準エラーストリームからの読み込みによって達成されます。QProcessクラスは、QIODeviceから派生され、テキストとデータをストリームへまたはストリームからストリーミングできることを意味します。

QProcessは、非同期的に働き、シグナルをエミットすることによってデータが利用可能かをレポートします。Qtアプリケーションは、処理するためのデータを取得するためにシグナルを接続でき、そして、オプションで外部プログラムにデータを送り返すことで応答します。Qtのプロセスは、操作のブロックモードもサポートし、ファイルへの外部プログラムからのリダイレクト入力と出力も処理します。

加えて、アプリケーションと、コンポーネントおよびオペレーティングシステム間のハイレベル通信は、D-BusプロトコルをサポートするUnixプラットフォーム上で実現されます。QtDBusモジュールは、XMLベースのインターフェイスファイルを作成することによってサービスにアプリケーションを公開できます。これらは、Qtと共に供給されるツールによってC++ソースコードに変換されます。

共有メモリーやシステムセマフォのような、ローレベル共有リソースへのアクセスは、専用のクラスによって提供されます。これらは、代替の通信メカニズムを構築するための基礎を提供されます。

ネットワーク

Qtは、IPv4とIPv6をサポートする、TCP/IPクライアントとサーバーを書くためのクロスプラットフォームのインターフェイスを提供します。提供されるすべてのネットワーククラスは、リエントラントで、任意のスレッドから使用することができます。


Qt FTPサンプルは、シンプルなFTPブラウジング機能を提供するためにQtのネットワーク機能を使用しています。

QTcoSicketクラスは、非同期で、バッファー化されたTCP接続を提供します。他のQIODeviceサブクラスと同様に、テキストとデータのストリームはソケットレベル通信の処理のために使用することができます。同様に、QUdpSocketは、UDPソケット操作を処理します。両クラスは、操作のブロッキングと非ブロッキングモードをサポートします。Qtのすべてのネットワーククラスは、リエントラントで、任意のスレッドから使用することができます。

カスタムTCPサーバーは、QTcpServerをサブクラス化することによって実装することができ、入ってくる接続とクライアントへのサービスを処理するための非同期フレームワークを提供します。サーバーは、ブロックと非ブロックモードで操作できます。

プロキシサーバーのサポートは、QNetworkProxyクラスを通して利用可能で、アプリケーションワイドとプリソケットプロキシ機能の両方を可能にします。HTTP、FTP、SOCKS 5プロキシタイプがサポートされ、パフォーマンスを向上させるために、キャッシュ機能を採用しています。カスタマイズ機能は、アプリケーションワイドなポリシーを可能にするために採用され、ソケットタイプ、使用するプロトコル、そして他の基準をベースにプロキシのセットアップを可能にします。

QAbstractSocketクラスは、ネイティブソケットAPIのプラットフォーム非依存のラッパーです。それは、TCP、UDP、そしてローカルドメインソケットに基づく機能を提供します。プロキシサーバーのサポートは、QNetworkProxyクラスを通して利用可能で、アプリケーション全体とソケットごと両方のプロキシ利用を可能にします。

ネットワーク操作のための管理基盤は、QNetworkAccessManagerから提供され、HTTP、FTP、そしてリプライ処理のような共通プロトコル全体リクエストのディスパッチのために使用されます。リクエストとリプライのための特定のクラスは、開発者が特定のリクエスト用にカスタマイズを可能にしつつ、一般的な通信を簡単にします。

マシンのネットワークインターフェイスについての情報は、QNetworkInterfaceクラスによって提供されます。これは、各インターフェイスの詳細、機能、それらに割り当てられたIPアドレス、その他のインターフェイス依存情報を公開します。例えば、イーサネットインターフェイスでは、ハードウェアに基いてMAXアドレスが取得でき、IPアドレスに加えてブロードキャストアドレスとネットマスクを取得できます。

暗号化通信

Qtは、SSLv3とTLSv1を含む、Secure Socket Layer (SSL)をベースにした暗号化されたTCP接続の使用を通した安全なネットワーク通信の機能を含んでいます。QSqlSocketは、クライアントとサーバー両方に使用できるSSL暗号化ソケットを提供します。暗号化と認証プロセスの他の側面のための抽象概念は、暗号、キー、証明書のクラスによって対処されます。

オンラインリソース

http://qt.nokia.com/doc/latest/qiodevice.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/qtxml.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/qtnetwork.html [qt.nokia.com]

コレクションクラス

コレクションクラスは、メモリにアイテムのグループを保持するために使用します。Qtは、Standard Template Library (STL)と互換性のあるクラスのセットを提供し、それは、STLをサポートするコンパイラーかどうかにかかわらず動作します。安全性と利便性のために、Javaスタイルのイテレーターも提供します。

アプリケーションは、よくイメージ、ウィジェット、またはカスタムオブジェクトのグループのようなアイテムをメモリで管理する必要があります。多くのC++コンパイラは、アイテム保存のための読み取り専用データ構造として、STLをサポートしています。Qtは、STL構文のリスト、スタック、キュー、そして辞書を提供します。Qtのコレクションクラスは、STLをサポートできないコンパイラでも動作します。

Qtのポータブルコレクションクラスの豊富なセット("コンテナ")と関連付けられたイテレーターは、Qt内部で頻繁に使用され、Qt APIの一部として提供されます。Qtのコンテナは、速度とメモリ効率のために最適化されています。プログラマーは、Qtの最適化を失うコストだけで、それらのサポートするプラットフォーム上のSTLコンテナを使用することもできます。

使用すると劇的に実行ファイルサイズが増大する多くのテンプレートクラスと違って、Qtのテンプレートコレクションクラスは、コードの拡張を最小限にするために最適化されています。

コンテナ

Qtは、シーケンシャルコンテナクラスとして、リスト(list)、リンクリスト(linked list)、ベクター(vectors)、スタック(stacks)、そしてキュー(queues)を提供し、インターフェイスは、対応するSTLコンテナにかなり似ていて、そして、それぞれは、STLアルゴリズムと完全にコンパチブルです。Qtは、アイテムのコピー、検索そしてソートなどの、一部STLと同じアルゴリズムを提供します。STLをサポートするプラットフォーム上で、Qtは、STLとQtコンテナ間の自動的な変換演算子を提供します。

加えて、Qtは、STLよりもJavaコンテナに慣れている開発者のために、Javaスタイルのイテレーターも提供します。

Qtは、マップ、ハッシュ、そしてセットのための連想コンテナクラスを提供します。"ハッシュ"コンテナは、検索パフォーマンスを向上させるためのハッシュ関数を使用します。マップとハッシュコンテナは1対1そして1対多の変数を利用可能です。

Qtのシーケンシャルと連想コレクションクラスは、値ベースとポインターベースの両方の格納のために使用することができ、QWidgetQObjectのポインターを処理することを特に有益にします。ポインターベースのアイテムを保持するために使用するとき、コレクションが破棄される前に一度にコレクションの内容を削除するために使用する便利な関数を使用できます。

暗黙の共有

Qtの値クラスと共に使用するとき、アイテムは、それらのコレクションクラスの暗黙の共有を持っています("コピーオンライト")。これらのクラスのコピーは、メモリの同じデータを共有します。データの共有は、自動的に処理されます; アプリケーションが、コピーされたオブジェクトの一つの内容が変更した場合は、データのディープコピーは、他のオブジェクトが変更されずに残るように行われます。オブジェクトがコピーされた時、ポインターだけが渡され、参照カウンターがインクリメントされるので、実際のデータのコピーよりも高速で、メモリも節約されます。

共有は、意味があるときはいつでも使用されます: Qtの値ベースコレクションクラスと、他の共通使用クラス。プログラマーは、安全で効果的に値によるこれらのクラスのオブジェクトをコピーでき、手作業によるポインターベースコードの最適化による関するリスクを避ける事ができます。特に、暗黙に共有されたQStringをQRegExpクラスは、簡単で高速な文字列処理を行います。

Qtは、標準的なデータ型を効果的に処理するローレベルのビットとバイトの配列クラスも提供します。

オンラインリソース

http://qt.nokia.com/doc/latest/containers.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/implicit-sharing.html [qt.nokia.com]

プラグインとメタオブジェクトシステム

Qtアプリケーションは、プラットフォーム非依存APIを使ったダイナミックライブラリーから機能にアクセスできます。Qtはプラグインもサポートし、開発者に、分割コンポーネントとしてコーデック、データベースドライバー、イメージフォーマットコンバーター、スタイル、そしてカスタムウィジェットの作成と配布を可能にします。

プラグインとライブラリー

Qtコンポーネントのプラグインへの変換は、少数のシンプルな関数を実装して、適切なプラグインベースクラスをサブクラス化するし、マクロを追加することで完了します。この方法で書かれたプラグインは、プロパティーを公開し、シグナルとスロットメカニズムを通してアプリケーションと対話します。

プラグインとして供給されるコンポーネントは、アプリケーションによって自動的に検出され使用されます。多くのサードパーティーは、コンパイル済みのダイナミックライブラリや、プラグインのソース形式でQtコンポーネントを提供します。

QLibraryクラスは、ダイナミックライブラリーの読み込みのためのクロスプラットフォームAPIを提供し、Cリンケージのシンボルとして公開された関数呼び出しのためのタイプセーフな方法を提供します。

メタオブジェクトシステム

メタオブジェクトシステムは、確証された実行時型情報と他の動的機能を提供するためのコンパイル段階での付加データと共にQtコンポーネントを強化します。このアプローチは、Qtが実行時オブジェクトイントロスペクション、国際化の目的のための翻訳メカニズム、シグナルとスロット、そして関数を呼び出す一般的な方法とメソッドのような機能の提供を可能にします。

豊富な型のオブジェクトシステムの使用は、アプリケーションが、Qtスクリプトまたはメタオブジェクトシステムと統合された他のプログラミング言語ソリューションのスクリプト化を可能にします。

上で述べたように、これらの機能は、プラグインからアプリケーションに公開することも、そしてその逆も可能です。

オンラインリソース

http://qt.nokia.com/doc/latest/plugins-howto.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/metaobjects.html [qt.nokia.com]

Qtアプリケーションの構築

Qtの開発者は、すべてのサポートされたプラットフォーム上でアプリケーションの構築のプロセスを簡素化するためにツールのスイートを活用することができます。アプリケーション、ライブラリー、そしてプラグインは、各プラットフォームへの適切なMakefileを作成するために処理されたプロジェクトファイルによって記述されます。

Qtは、シンプルなコマンドラインツールから人気の統合開発環境(IDE)まで、開発ツールと環境で広範囲に働くように設計されています。また、Qt Creatorは、軽く、Qtアプリケーションの開発に特化されたクロスプラットフォームのIDEです。

Qtのビルドシステム

プロジェクトは、ソースとヘッダーファイル、Qt Designerフォーム、そして他のリソースの簡素ではあるが判読可能な記述を含むプロジェクトファイルによって記述されます。これらは、各プラットフォーム上のプロジェクトのために適切なメイクファイルを作成するためのqmakeツールによって処理されます。

Qtライブラリーの全て、ツール、そしてサンプルは、プロジェクトファイルによって記述されています。簡単なサンプルは、数行の宣言の記述することができます。

条件付きビルドのサポートは、プラットフォーム固有のコードをプロジェクト内に組み込むことができ、そして、適切なプラットフォームのためにビルドするだけであることを意味しています。

プロジェクトのビルドのためにqmakeを使用するとき、Qtのすべての強化された機能は、他のツールの適切なビルドのために自動的に処理されます: mocは、シグナルとスロットを有効にするためにヘッダーファイルを処理し、rccは、指定したリソースをコンパイルし、そして、uicは、Qt Designerで作成されたユーザーインターフェイスフォームからコードを作成するために使用されます。

コンパイル済みヘッダーのサポート、pkg-configの統合、Visual Studioプロジェクトファイルの作成機能、そして、他の高度な機能は、開発者に、共通のプロジェクトコンポーネントのためのクロスプラットフォームビルドシステムの使用を維持しながらプラットフォーム固有のツールの利用を可能にします。

Qtのリソースシステム

Qtは、アプリケーションに必要な任意のリソースに実行時にアクセスできるように、実行ファイル内にデータファイルの格納を可能にするためのリソースシステムを提供します。Qtのウィジェットは、開発者がこれらのパックされたリソースへの直接参照を可能にするネーミングスキームをサポートします。

アプリケーションとともにパックされたリソースは、Qt Resource Collectionファイルにリストされ、アプリケーションで使用されるリソースパスと共にビルドディレクトリーのファイルのリストに含まれます。これらのファイルは、アプリケーション内にコンパイルされたデータを作成するためにrccを使って処理されます。このアプローチは、特定の重要なリソースが、常にアプリケーションで利用可能であることを保証し、配布とインストールで起こる問題を回避します。

リソースシステムは、QResourceクラスで実行時に拡張することもでき、リソースを検索するためのパスを追加可能で、そしてリソースを必要に応じて読み込む事ができ、アプリケーション内に構築されたものを拡張します。


Qt Creatorの全体像

Qtアプリケーションのテストとベンチマーク

ユニットテストのサポートは、標準Qtモジュールとして提供されます。ユニットテストは、テスト関数を含むQObjectベースのクラスとしてC++で書かれていて、そして、これらは、すべてのテストするフレームワークに非依存で実行することができる実行ファイル内にコンパイルされます。Qtのユニットテストライブラリーは、テストをするためのグラフィカルユーザーインターフェイスを可能にするための拡張も提供します。

ユニットテストは、簡単なマクロの使用で操作の実行ベンチマークをセットアップすることもできます。テストケースは、異なるバックエンドの使用を通してパフォーマンスの測定とレポートのために設定することも可能で、標準ツールを使ってパフォーマンスデータの可視化を可能にします。

Qt Creator

Qt Creatorは、Qt開発フレームワークのC++とQtソフトウェア開発のための軽量なIDEです。しかし、それは、簡単に使えるように設計され、Qt Creatorは、開発者がIDEに期待するすべての機能を提供し、シンタックスカラーリング、コード補完、クラス、関数と他のC++構造体のクイック検索、そして、統合されたデバッグサポートを含みます。

Qt固有の機能は、シグナルとスロットシグネチャーの実現、Qt Designerサポートの統合、そして組み込みQtドキュメントを含みます。Qt Creatorホワイトペーパー[qt.nokia.com]には、この製品のより詳細な紹介を含みます。

オンラインリソース

http://qt.nokia.com/doc/latest/qmake-manual.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/qtestlib-manual.html [qt.nokia.com]

Qtのアーキテクチャー

Qtの機能性は、それがサポートするプラットフォームのローレベルAPI上でビルドされます。これは、Qtを柔軟で効率的にし、単一のプラットフォームアプリケーションに合わせることを可能にします。

Qtは、各サポートプラットフォーム上のヒューマン・インターフェイスガイドラインに正確に従うネイティブスタイルのAPIを使うクロスプラットフォームのフレームワークです。Qtによって描画されるすべてのウィジェットとプログラムは、仮想関数の再実装によって拡張とカスタマイズができます。Qtのウィジェットは、Styles-and-Themesに記述されているように、サポートされたプラットフォームのルックアンドフィールを正確にエミュレートします。このテクニックは、開発者にそれらのアプリケーションのために全く異なるルックアンドフィールを提供するためにそれら独自のカスタムスタイルを得ることもできます。

Qtは、様々なプラットフォームがサポートするローレベルAPIの使用をします。これは、一つのプラットフォーム全体を薄くラップする従来の"レイヤー化された"クロスプラットフォームツールキットとは異なります(例えば、WindowsのMFCやX11のMotif)。レイヤー化されたツールキットは、すべてのライブラリーの関数呼び出しで結果的に様々なAPIレイヤーを通して追加で多くの下位を呼び出すので、一般に遅くなります。レイヤー化されたツールキットは、しばしば機能とツールキットに基づく動作によって制限され、アプリケーションにわかりにくいバグを誘発します。

Qtは、専門的にサポートされ、そして利用可能なプラットフォームの活用します: Microsoft Windows、X11、Mac OS X、そしてEmbedded Linux。一つのソースツリーを使って、Qtアプリケーションは各ターゲットプラットフォームで実行するためにコンパイルすることができます。しかし、Qtは、顧客が簡単に学習でき、多くのプラットフォーム依存のツールキットよりもより生産的な、クロスプラットフォームフレームワークです。一つのプラットフォームで開発するためにQtを使う多くの顧客は、Qtの完全なオブジェクト指向のアプローチを好みます。

X11

X11のためのQtは、Xサーバーと直接通信するXlibを使用します。Qtは、Xt (X Toolkit)、Motif、Athena、またその他のあらゆるツールキットを使用しません。

Qtは、次のバージョンのUnixをサポートします: AIX、FreeBSD®、HP-UX、Linux、NetBSD、OpenBSD、そしてSolaris。サポートされたコンパイラーとオペレーティングシステムのバージョンについては、Qt Developer Framework Webサイトを参照してください。

Qtアプリケーションは、ユーザーのウィンドウマネージャーまたはデスクトップ環境に自動的に適応し、Motif、CDE、GNOMEKDEのネイティブなルックアンドフィールになります。これは、それら独自のルックアンドフィールにユーザーを固定する、他のほとんどのUnixのツールキットと対照的です。

Qtは、完全なUnicodeをサポートを提供します。Qrアプリケーションは、Unicodeと非Unicodeフォント両方を自動的にサポートします。Qtは、マルチリンガルテキストをレンダリングするための複数のXフォントを組み合わせます。Qtのフォント処理は、現在のフォントで利用できない文字のために、すべてのインストール済みフォントを検索する、十分なインテリジェンスを備えています。

Qtは、Xエクステンションの利点を利用可能です。Qtは、アンチエイリアス、アルファブレンドフォント、ベクターグラフィックのためのRENDERエクステンションをサポートします。Qtは、その場での編集のためにX Input Methodsを提供します。Qtは、従来のマルチヘッドとXineramaの両方のマルチスクリーンをサポートします。

Microsoft Windows

Windows用のQtでは、低レベルイベントと描画のためにWin32® APIとGDIを使用します。Qtは、MFCやその他のすべてのトールキットを使用しませんが、高速にレンダリングされる独自のよりパワフルで、カスタマイズ性に優れ、より正確なペイントエンジンであるウィジェットを提供します。(特別でない用途のために、QtはWindowsネイティブのファイルと印刷のダイアログを使用します。)

Windowsを使用する顧客は、Microsoft Visual Studioを使ってWindows 98、NT4、ME、2000、XP、そしてVista上で走るQtアプリケーションを作成できます。Qtは、Windowsバージョンのチェックを実行時に行い、そして、最も高度な利用できる機能を使います。Qt開発者を、WindowsAPIの差異から切り離します。

Microsoftアクセシビリティーインターフェイスは、Qtによってサポートされています。Windows上のコモンコントロールと違って、Qtウィジェットは、ベースウィジェットのアクセシビリティー情報をロスすることなく拡張することができます。カスタムウィジェットは、アクセシビリティーの提供もできます。Qtは、Microsoft Windows上のマルチスクリーンもサポートします。


サポートされたデスクトッププラットフォーム上のQtアーキテクチャーの全体図。

Mac OS X

Qtは、Cocoa®とCarbon®APIを組み合わせて使用することによってMac OS Xをサポートします。64ビットハードウェア上では、Qtは、Mac OS XネイティブウィジェットとCocoaビューの統合を可能にするためにCocoaライブラリーを使用します。

Mac OS XのQtは、レイアウトと簡単な国際化のサポート、OpenGLへの標準化されたアクセス、そして、Qt Designerでの強力なビジュアルデザインを導入します。Qtは、イベントループでファイルと非同期ソケットインプット/アウトプットを処理します。Qtは、ソリッドなデータベースのサポートも提供します。開発者は、包括的なドキュメントと完全なソースコードを含むモダンなオブジェクト指向APIを使ってMac OS Xアプリケーションを作成することができます。

開発者は、彼らの好むプラットフォームでアプリケーションを作成でき、他のサポートされたプラットフォーム上で単純に再コンパイルすることによって、大きく彼らのマーケットを拡大することができます。Mac OS X上のユニバーサルバイナリーのサポートは、IntelとPowerPCベースのMacのためにQtアプリケーションを作成することができることを意味します。望むならば、開発者は、それらのアプリケーションにプラットフォーム固有の機能を追加するためにネイティブコンポーネントをQtに統合して活用することができます。

オンラインリソース

http://qt.nokia.com/doc/latest/supported-platforms.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/installation.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/deployment.html [qt.nokia.com]

プラットフォーム固有の拡張機能とQt Solution

それ自体で完結していることに加えて、Qtは、特定のコンテキストの開発者を支援するための一部のプラットフォーム固有の拡張機能を提供します。ActiveQt拡張機能は、開発者がQtアプリケーション内でActiveXコントロールを使うことを可能にし、ActiveXサーバー内にそれらのQtアプリケーションを作成することもできます。他のプラットフォーム固有拡張機能は、Qt Solutionsを通して利用可能になります。

ActiveXの相互運用性

ActiveXは、MacrosoftのCOMテクノロジー上に構築されます。それは、アプリケーションとライブラリーがコンポーネントサーバーによって提供されたコンポーネントの使用し、それら自身が適切なコンポーネントサーバーになることを可能にします。WindowsのためのQtは、ActiveXサーバーにそれらのアプリケーションを変えることができるActiveQtモジュールを提供し、そして、他のアプリケーションによって提供されたActiveXコントロールを使用できるようにします。

Microsoftの.NETテクノロジーの統合は、ActiveQtでも可能です。アプリケーションは、Qtウィジェットとデータ・タイプへのアクセスを.NET開発者に自動的に与えるためにActiveQtのCOMサポートを使用できます。

ActiveQtは、Qt内にActiveXをシームレスに統合します: ActiveXプロパティー、メソッド、そしてイベントは、Qtのプロパティー、スロット、そしてシグナルになります。これは、Qt開発者が、馴染みのあるプログラムパラダイムを使ってActiveXを使用することを可能にし、そして、生成されたコードは通常のActiveX実装の一部なのですべての異なる種類からそれを隔離します。

ActiveQtは、ActiveXとQtデータ型間の変換処理を自動的に行います。ActiveQtは、コントロールのIDispatchインターフェイス実装を通したActiveXコンポーネントの制御のためのdynamicCall()関数をサポートします。

QtアプリケーションをActiveXサーバーに変えることは簡単です。我々は一つのクラスの公開だけが必要な場合、一つのヘッダーファイルのインクルードと同程度の手間です。一度クラスをコンパイルしたら、そのプロパティー、スロット、そしてシグナルは、ActiveXクライアントのActiveXプロパティー、メソッド、そしてイベントになります。ActiveQtは、開発者がどのコンテキストで機能を利用できるかを制御できるように、それ自体で実行するか、ActiveXコントロールとして使用されるかを判断する昨日も提供します。

Qt Solutions

Qtと共に供給されているすべてのクラスに加えて、Qt Development Frameworkは、Qt Solutionもあり、これは購入時またはアドオン製品としてのどちらかでQtライセンシーにオプションで利用できるサービスです。Qt Solutionは、コンポーネントとウィジェットのセットの更新を定期的に提供し、その多くは、Qtと同じデュアルライセンススキームの下で利用可能です。Qt3開発者のために利用できるほとんどすべてのSolutionsはQt4のためにも利用可能で、そして、Qt4のための多くの新しいSolutionsは既にリリースされています。

オンラインリソース

http://qt.nokia.com/doc/latest/activeqt.html [qt.nokia.com]

http://qt.nokia.com/doc/latest/intro-to-dbus.html [qt.nokia.com]

http://qt.nokia.com/products/appdev/add-on-products/qt-solutions [qt.nokia.com]

Qt開発コミュニティー

世界にいる企業と独立した開発者は、Qt開発コミュニティーに毎日参加しています。彼らは、Qtのアーキテクチャーが迅速なアプリケーションに向いているという認識を持っています。これらの開発者は、彼らのターゲットプラットフォームが1つか複数かにかからわず、Qtの一貫し直感的なAPIと協力なビルドシステム、そしてQt Designerのようなツールのサポートから恩恵を受けます。

Qtは、活発で役に立つqt-interestメーリングリスト、www.qtcentre.org [qtcentre.org]にあるQt Centre Webサイト、そして多くの他のウェブサイトとウェブログを使用してコミュニケーションするユーザーコミュニティーを持っています。加えて、多くのQt開発者は、KDE [kde.org]コミュニティーのアクティブメンバーです。我々は、商用の顧客とオープンソース開発者のためのオンラインの開発者ニュースレターであるQt Quartrly [qt.nokia.com]を発行しています。増え続けるサードパーティーによる商用とオープンソースのアドオンも利用できます; 最新情報はQt Development Frameworks [qt.nokia.com]サイトを参照してください。

Qtの広範囲なドキュメントは、オンラインのdoc.qt.nokia.com [doc.qt.nokia.com]で利用できます。英語、フランス語、ドイツ語、ロシア語、中国語、そして日本語の多くの本でもQtプログラミングの紹介と説明がされています。Qtの公式な本は、C++ GUI Programming with Qt 4[developer.qt.nokia.com] (ISBN 0-13-235416-0)です。

Qt Development Frameworksとそのパートナーは、一般の人々のためのオープンな入会コースとより特別なトレーニングが必要な顧客のためのオンサイトコースのQtとC++のためのトレーニングオプションを広く提供します。さらなる情報のためには、オンラインのQt Development Frameworks training pages [qt.nokia.com]を参照してください。

C++開発者のための包括的なフレームワークの提供と同様に、Qtは、他の様々なプログラミング言語を使用することもできます。Qt自身には、開発者がユーザーにアプリケーションの一部に制限付きのアクセスを与えるためのスクリプトであるJavaScript指向テクノロジーなQtScriptモジュールを含んでいます。

Qt Development Frameworksは、LGPLライセンスのもとでQt Jambiとして以前から知られている、Javaプログラミング言語のQtバインディングのセットを提供します。

Python、JavaScript、BASIC、Ada 2005、C#、Pascal、Lua、PerlそしてSchemeの言語バインディングは、Qt Development Frameworksのパートナーと様々なサードパーティーからも利用可能です; これらの多くのソリューションは、オープンソース開発者のチームによってプロデュースと管理が行われています。

開発者は、好きなプラットフォーム上で30日サポートされるQtの評価をすることができます。追加の情報については、http://qt.nokia.com/products [qt.nokia.com]を訪れてください。

オンラインリソース

http://qt.nokia.com/support-services/training [qt.nokia.com]

http://lists.trolltech.com/qt-interest/ [lists.trolltech.com]

http://qt.nokia.com/doc/qq/ [qt.nokia.com]

このドキュメントは、Creative Commons Attribution-Share Alike 2.5 [creativecommons.org]ライセンスのもとにライセンスされています。

詳細については、ライセンスの完全な条件である、http://creativecommons.org/licenses/by-sa/2.5/legalcode [creativecommons.org]を参照してください。

inserted by FC2 system