検索
特集

Qtとは――第1回 フレームバッファでQtアプリ(その1)UNIX USER1月号「デスクトップで動かす・学ぶQt/Embedded」より転載(2/3 ページ)

組み込みでのGUIアプリケーションは、ウィンドウシステムがない環境で動き、組み込みボードやタッチパネルなどの小型表示装置が用いられることが多いため、これまでは興味があっても簡単に手が出せませんでした。しかし最近は、Linux環境でフレームバッファが利用できるようになり、デスクトップマシンで組み込みGUIを体験できるようになっています。本連載では、Qt/Embeddedを使って、Linuxデスクトップマシンで組み込みのGUIプログラミングを体験します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 Qt/Embeddedに絞って、もう少し詳しくその機能を見てみましょう。

Qt/Embeddedの特徴

 Qtの開発は1991年に始まり、当初はUNIX/X11とWindowsでソースコードの互換性がある、デスクトップ向けのC++ GUIツールキットでした。その後、Mac OS X版も加わり、デスクトップでは合わせて3つのプラットフォームを現在サポートしています。このデスクトップ版のQtをEmbedded Linuxに移植したのがQt/Embeddedで、2000年にリリースされました。

 図3に示したように、どのプラットフォームでもQt APIレイヤーは共通です。プラットフォームに固有の部分は、プラットフォーム依存レイヤーで吸収され、共通のQt APIを用いてアプリケーションを作成できます。このような構成のため、Qt/Embeddedでは、デスクトップ向けQtとほとんど同じGUI機能をEmbedded Linuxでも使え、組み込み環境でX11サーバーなどのウィンドウシステムを動かすツールキットと比べて*、メモリ使用量を抑えられるという利点があります。さらに、ハードウェアリソースに余裕のあるデスクトップマシンのLinux/X11環境で開発し、ターゲットプラットフォーム向けに改めて調整するという開発形態を取ることも可能です。

 このほか、マルチプラットフォームのためには、GUI部分だけでなくファイル処理やネットワークなども共通の枠組みで扱う必要があり、Qtではよく使用される機能がラッパークラスとして提供されています(表3)。

 なお、詳細については、配布ソースに同梱されているHTML形式のリファレンスマニュアルを参照してください。ドキュメントは詳しく丁寧に書かれていて、実践的なチュートリアルとサンプルコードもたくさん同梱されています(表4)。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

Qt/Embeddedのターゲット

 Qt/Embeddedがターゲットとする組み込み環境は、ある程度ハードウェアのスペックに余裕があり、デスクトップ環境と同じような機能が求められる場合、つまり、組み込みで高機能なGUIが必要とされるような領域です。また、Qt自体がUNIXをメインターゲットの1つとしているので、UNIX/Linuxにおける高い開発効率とプログラミングのしやすさという恩恵を受けられるのも大きな利点です。

Qtとの相違

 Qtは、マルチプラットフォームを考えて設計されているので、ほとんどのコードをQt APIで記述できます。しかし、Qt/Embeddedはウィンドウシステムのない環境で用いることからも類推できるように、デスクトップのQtといくつか相違があります。

  • ウィンドウマネージメント機能

 デスクトップ上では、ウィンドウシステムがGUIアプリケーションのウィンドウや、キーボードとマウスのイベントを管理します。Qt/Embeddedでは、最初に起動されたアプリケーションがこれらの機能をサーバーとして提供し、それ以降起動されるものも含め、すべてのアプリケーションは、このサーバーとのやり取りによって、ウィンドウ操作やイベント処理を行います。

 最初に起動するアプリケーションでサーバー機能を提供するには、次のように「-qws」オプションを指定して起動します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 以降のアプリケーションは、「-qws」を付けずに起動します。

 なお、QApplicationオブジェクト生成時にQApplication::GuiServerを指定することでも、同様にサーバー機能が有効になります。

  • ウィンドウ装飾

 ウィンドウの枠やタイトルバーなどのウィンドウ装飾は、一般にウィンドウシステムが行いますが、Qt/Embeddedでは、Qt/Embeddedのウィンドウマネージメント機能がウィンドウ装飾をします。しかし、組み込み向けの用途では、デスクトップ環境のようなウィンドウ操作は必要とされないので、デスクトップ版ほどの自由度は省かれています。デスクトップ版のようなウィンドウ装飾が必要ならば、QWSDecoration*をサブクラス化して、Qtのウィンドウマネージメント機能をカスタマイズすれば良いでしょう。

  • Qt/Embedded特有のクラス

 リスト1は、Qt/Embedded特有のクラスの一部です。Qtのアプリケーションレベルのプログラムでは使用しませんが、タッチパネルドライバ用にQWSMouseHandlerのサブクラス化や、フレームバッファのレイアウトに合わせたQLinuxFbScreenのカスタマイズが必要な場合もあります。

 また、アプリケーションレベルで、Qt/Embeddedのサーバー機能を介したQCopChannelによるアプリケーション間通信やQDirectPainterを用いて、Qtの描画処理を介さずに直接フレームバッファにアクセスして高速な描画を行うこともあります。

  • Qt/Embeddedで制限のある機能

 Qt/Embeddedでは、デスクトップ環境に特有な機能は使用できません。機能上の制限は表5のようになります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

Copyright(c)2010 SOFTBANK Creative Inc. All rights reserved.

ページトップに戻る