Qtとは、ファイル操作やデータベースアクセス、XML解析、ネットワークサポートなどの機能を備えたアプリケーションを開発するためのフレームワークです。Armadilloでは、主にGUIツールキットとして利用します。
Armadillo-840で採用しているQt5は、従来からのQt C++ UIフレームワークに加え、Qt Quickと呼ばれるいまどきのUIを簡単に作成するためのフレームワークを持っています。Qt Quickは、OpenGLをベースに、3D空間のオブジェクトを表現する「シーングラフ(Scene Graph)」、画面クリック時に波紋を生成するような「パーティクル・システム(Particle System)」、さらに画像処理に力を発揮する「シェーダー・エフェクト(Shader Effects)」機能を持ったフレームワークです。Qt5では、このような高い機能を、QMLというJavascriptに似た言語によって表現することで、とても簡単に使うことができるようになっています。
Qtには、様々な支援ツールが存在しています。統合開発環境のQt Creator、UIデザインツールのQt Designer、翻訳支援ツールのLinguistなどが用意されています。ATDEには、これらのツールキットが標準でインストールされており、すぐにアプリケーション開発を始めることができます。
Qt Creatorは、ユーザーインターフェース(UI)のデザインやプログラムのビルド・デバッグなどを行うことができる統合開発環境です。
デスクトップの左上の「アプリケーション -> プログラミング -> Qt Creator」で起動させることができます。
本節では、新規にプロジェクトを作成する手順について説明します。
新規にプロジェクトを作成すると、スケルトンと言われる単純アプリケーションの
ソースコードが自動的に生成されます。
このスケルトンをベースにアプリケーションを開発していきます。
新規プロジェクトを作成するには、Qt Creatorのメニューから
「ファイル -> ファイル/プロジェクトの新規作成」を選択します。
新規作成画面では、Qt GUIアプリケーションを選択します。
次に、Qt GUIアプリケーションの設定を行います。初めにプロジェクト名とパスを設定します。
ここでは、名前に「hello-qt」、パスに「/home/atmark」を指定します。このように設定すると、/home/atmark/hello-qt/ディレクトリ以下に自動的にファイル(プロジェクトファイルやソースコードなど)が作成されます。
次に、キットの選択を行います。
キットとは、特定のプラットフォーム用のアプリケーションをビルドする環境や実行する環境、その他の必要なツール類を指定する設定の総称です。ATDEでは、「デスクトップ」と「Armadillo(armhf)」の2種類をあらかじめ用意してあります。
| |
---|
キット「Armadillo(armhf)」は、atmarkユーザーのみ使用可能です。
ATDEに新規に追加したユーザーで「Armadillo(armhf)」を使用する場合は、
次のようにコマンドを実行してください。
|
「デスクトップ」は、ATDE上で動作するアプリケーション用の設定です。
「Armadillo(armhf)」は、Armadillo上で動作するアプリケーション用の設定です。ビルド環境には、クロスコンパイラやクロスライブラリのパスなどが設定されています。Armadillo上にファイルを転送するための設定やリモート実行する設定などがテンプレートとして指定されています。これらの制御はネットワークを経由して行われます。
通常は、設定を変更する必要はありません。
次に、自動生成されるソースコードの基底クラスなどの情報を指定します。ダイアログベースのアプリケーションを作成する場合などに、基底クラスを変更します。
本節では、設定を変更する必要はありません。
次に、プロジェクトのバージョン管理方法を指定します。gitなどでバージョン管理を行う場合に設定を行います。
本節では、設定を変更する必要はありません。
これで新規プロジェクトの作成が完了しました。パスで設定した/home/atmark/hello-qt/ディレクトリ以下にスケルトンが生成されています。
新規プロジェクトで生成されたスケルトンのソースコードは、実行すると単純にウィンドウが表示されるだけのものです。
本節では、プログラミングのファーストステップである「Hello World」を作成してみましょう。作成されたスケルトンをベースに「Hello, World!」が表示されるようにソースコードを変更します。
まずは、プロジェクトの設定に一部情報を追加します。
リモート実行時にArmadillo上の/tmpにファイルが転送され実行できるように、プロジェクトファイル(hello-qt.pro)にインストールパスを設定します。
続いて、「Hello World!」が表示されるようにmainwindow.cppを変更します。
14.3.3. Hello Worldをデスクトップ上で実行
作成したソースコードをビルドして実行してみましょう。まずは、ATDE上のデスクトップで実行してみます。
キットには、デスクトップを選択します。画面左中央のプロジェクトタブを選択して、「デスクトップのビルド」を選択します。シャドウビルドのチェックは外しておきます。
ビルドを行うには、Qt Creatorのメニューの「ビルド -> プロジェクト "hello-qt" をビルド」を選択します。ビルドエラーとならない場合は、「ビルド -> 実行」を選択すると実行されます。
実行すると次のようにウィンドウが表示されます。
14.3.4. Hello WorldをArmadillo上で実行
デスクトップ上で実行確認ができたので、次はArmadillo上で実行してみましょう。
デスクトップ時の操作とほとんどかわりありませんが、標準状態のATDEに設定されている「Armadillo(armhf)」の設定では、ターゲットのArmadilloのIPアドレスが設定されていないため、ファイル転送やリモート制御することができない状態となっています。また、工場出荷状態のArmadilloでは、ファイル転送やリモート制御に利用するSSHが利用できない状態となっています。
まずは、Armadillo側でSSHを利用できるように設定します。
14.3.4.1. Armadillo上でSSHを設定
ArmadilloのSSHの設定は、専用のスクリプトが用意されているため簡単です。
Armadilloを起動させてログイン後、次のようにコマンドを実行してください。
SSHの鍵を生成すると自動的にフラッシュメモリに保存され、Armadilloの次回起動時には自動的にSSHサーバーが起動します。
続いて、ArmadilloのIPアドレスを確認しておきましょう。
14.3.4.2. Armadillo(armhf)の設定
リモートターゲットの設定を行います。
画面左中央の「プロジェクトタブ」を選択して、「Armadillo(armhf)のビルド」を選択します。シャドウビルドのチェックは外しておきます。
左上にある「キットを管理」をクリックします。
フィルタリストの「デバイス」をクリックします。Armadilloデバイスの設定項目が表示されるので、ホスト名欄に利用するArmadilloのIPアドレスを入力します。
続いて、リモート実行時の設定を修正します。
画面上部のArmadillo(armhf)の「実行」タブをクリックします。
デプロイ項目の「ディスクの空き容量チェック」を削除します。
続いて、実行項目の実行構成を「hello-qt (リモートデバイス上)」に設定します。
これでArmadillo上でリモート実行する準備が整いました。
本節の構成どおりに作業を行った場合、hello-qtプロジェクトはデスクトップ用にビルドされています。Armadillo用にビルドしなおすために、メニューの「ビルド -> プロジェクト "hello-qt" をリビルド」を選択します。ビルドエラーとならない場合は、「ビルド -> 実行」を選択すると実行されます。
| |
---|
本節の構成どおりに作業を行い、メニューの「ビルド -> プロジェクト "hello-qt" をビルド」を選択した場合、実行時に "ash: /tmp/hello-qt: not found" というエラーが出る場合があります。
このようなエラーが出た時は、「ビルド -> プロジェクト "hello-qt" をリビルド」または、「ビルド -> プロジェクト "hello-qt"をクリーン」「ビルド -> プロジェクト "hello-qt"をビルド」を行い、
プロジェクトをArmadillo用にビルドしなおすことで解決できます。
|
14.3.5. Hello Worldを拡張ボードのLCDに表示
拡張ボード01のLCDに画面を表示するためには、環境変数「QT_QPA_EGLFS_DISPLAY」に値「1」を設定します。
Qt Linguistは、翻訳支援ツールです。多国語に対応したアプリケーションを作成する場合に利用します。本節では、「Hello World!」を「こんにちは!」に変換する手順を例に説明します。
Hello Worldのソースコードを見るとわかりますが、文字列はtr()によって括られています。このtr()で括られた文字列を任意の言語に変換して表示することができます。
大まかな手順は次の通りです。
プロジェクトファイルにTSファイル[]の指定を追加
プログラムでQMファイル[]を読み込むように変更
TSファイル、QMファイルを作成
まずは、プロジェクトファイル(hello-qt.pro)にTSファイルの指定を行いましょう。
次のように記述を追加します。
続いてプログラムがQMファイルを読み込むように、main.cppを次のように変更します。
続いて、TSファイルの作成を行います。この作業はQt Creatorでは行えないため、
ターミナル上で作業します。次のコマンドを実行することにより、プロジェクト内の
翻訳対象の文字列から自動的にTSファイル(hello_ja.ts)を作成します。
生成されたhello_ja.tsをQt Linguistで開きます。
ソーステキストの「Hello, Wolrd!」をクリックし、日本語訳欄に「こんにちは!」を入力します。変更を確定するには、メニューの「翻訳 -> 完了にして次へ」を選択します。
翻訳を完了する場合は、メニューの「ファイル -> 保存」を選択します。
また、翻訳ファイルをプログラムが扱える形式にするためにエクスポートします。
メニューの「ファイル -> リリース」を選択します。
リリースするとQMファイル(hello-qt_ja.qm)が作成されます。
これで、QMファイルが作成できました。続いて、QMファイルを実行ファイル(hello-qt)に統合するためにリソース化します。まずは、プロジェクトにリソースファイル(hello-qt.qrc)を追加します。
メニューの「ファイル -> ファイル/プロジェクトの新規作成」を選択します。
ファイルとクラス項目の「Qt」を選択して、「Qt リソースファイル」を選択します。
ファイル名とパスを選択します。ここでは、名前に「hello-qt」、パスには「/home/atmark/hello-qt」を指定します。
プロジェクト管理については、特に変更する必要はありません。
これで、プロジェクトにリソースファイルが追加されました。続いて、リソースに翻訳ファイルを追加します。「追加」から「プレフィックスを追加」を選択し、プレフィックス欄に「/」を指定します。
続いて、「追加」から「ファイルを追加」を選択し、ファイルダイアログからhello-qt_ja.qmを選択します。
これで、QMファイルをリソースとしてプロジェクトに登録することができました。
デスクトップ上でhello-qtを実行してみましょう。次の図のように「こんにちは!」と表示されます。
Armadillo上で日本語を表示するには、環境変数「LANG」を指定する必要があります。
左のプロジェクトタブをクリックして、Armadillo(armhf)の「実行」タブをクリックします。実行のシステム環境変数を使用の「詳細」をクリックして、詳細設定を表示させます。「デバイス環境にフェッチ」をクリックして、Armadilloの環境変数をフェッチしてください。その後、追加で変数に「LANG」、値に「ja_JP.UTF-8」を入力してください。Armadillo用にリビルドを行い、実行するとArmadillo上でも日本語が表示されます。
QMLとは、Qt Quickの一部分として実装された、ユーザーアプリケーションを開発するための言語を指します。
アニメーション制御や状態遷移などを簡単に記述でき、ボタンやスクロールなどのコンポーネントと組み合わせることで簡単にユーザーインターフェースを実現することができます。
QMLを利用したアプリケーション開発では、QMLアプリケーション、
QML UIの2つの種類があります。
QMLアプリケーションは、QMLファイルやC++ファイルなどをビルドして1つのバイナリに統合したものを指します。
QML UIは、C++言語で記載する箇所がなく、ビルドもしません。
QMLファイルを直接qmlsceneから起動させることができます。
利点としては、コンパイラが不要のため、エディタのみでも開発できることです。
本節では、QML UIの作成・動作確認方法について説明します。
まずは、Qt Creatorを利用して、QML UIのスケルトンを作成しましょう。
QML UIのスケルトンは、画面中央に「Hello World」と表示されるものとなっています。
メニューの「ファイル/プロジェクトの新規作成」を選択して、「Qt Quick2 UI」を選択します。
プロジェクト名とパスを設定します。ここでは、プロジェクト名に「hello_qml」、パスに「/home/atmark/」としておきます。
プロジェクト管理については、特に変更する必要はありません。
これで、QML UIのスケルトンが作成されました。
Qtアプリケーションと違い、QML UIではキット設定がありませんでしたね。これは、前述した通りビルドステップがないためです。
作成されたスケルトンをそのまま実行すると、次のようにウィンドウが立ち上がります。
ビルドステップが無いため、Armadillo上で動作させるには、qmlファイルのみを転送するだけで実行準備が整います。Armadilloにファイルを転送しましょう。FTPなどで転送します。
転送が終われば実際に動作させてみましょう。次の例では、FTP経由で/home/ftp/pub/にファイルを転送した場合です。
| |
---|
拡張ボード01のLCDに画面を表示するには、次のようにコマンドを実行します。
|
14.6. オリジナルQtアプリケーションをatmark-distへ統合
作成したオリジナルのQtアプリケーションをatmark-distへ統合する方法について説明します。atmark-distへ統合することにより、ユーザーランドのイメージファイル(romfs.img.gz)に自動的にインストールされるようになります。
14.6.1. Qtアプリケーションをatmark-distに統合
まずは、「Hello World」で作成したhello-qtプロジェクトを統合してみましょう。atmark-distには、Qtアプリケーションを簡単に統合できるように実装されています。
ここでは、atmark-distとhello-qtは、atmarkユーザーのホームディレクトリ(~/)に存在すると仮定します。
まずは、hello-qtプロジェクトをクリーンアップします。プロジェクトのディレクトリで次のように「make distclean」を行います。
hello-qtディレクトリをatmark-dist/user/qt5/以下へコピーします。
実行ファイルhello-qtがユーザーランドの/usr/bin/ディレクトリにインストールされるようにエディタでプロジェクトファイルを修正します。
続いて、atmark-distのビルドシステムにhello-qtを登録します。
これで、atmark-distにhello-qtを追加することができました。Armadillo-840用にatmark-distをビルドするとユーザーランドイメージに/usr/bin/hello-qtが追加されます。フラッシュメモリを更新してArmadilloを起動後、次のように実行することができます。
14.6.2. QML UIをatmark-distに統合
ここでは、「QML」で作成したhello_qmlをatmark-distに統合する方法について説明します。
hello_qmlはQML UIのため、前述した通りにビルドの必要がありません。そのため、インストール時の動作のみを記述します。まずは、hello_qmlディレクトリをコピーします。
続いて、atmark-distのビルドシステムにhello_qmlを登録します。
QML UIでは、自動的にMakefileが生成されないため、インストール用の記述を記載したMakefileを作成します。
これで、atmark-distにhello_qmlを追加することができました。Armadillo-840用にatmark-distをビルドするとユーザーランドイメージに/usr/share/qt5/hello_qml/hello_qml.qmlが追加されます。フラッシュメモリを更新してArmadilloを起動後、次のように実行することができます。