Qt

QMLのオブジェクトを作ろう - Qtで作るAndroid目覚ましもどき #3-2 -

Qtで作るAndroid目覚ましもどきシリーズ3としてまず画面構成の話をします、の2回目。

QMLのオブジェクトを作ろう

概要

要するにモジュール化の話でしょうか。普通のプログラムにおいてmainの関数が大きくなりすぎないようにしたり部品を使いまわしたりするために適当にモジュールを作成するように、QMLも部分を切り出してモジュール化することができます。
cやjavascriptなどのプログラムと違うところとしては、モジュールは必ず別のファイルになります。QMLは1つのファイルについては(大きな)部品1つだけを書くようになっています。
この程度の話は本などを読めば書いてあるようで、なんか私が勉強した本は不親切な書き方だった気がするのでこの記事を書きます。

やりかた

まず(部品の名前を決めて)部品の名前.qmlファイルを作って内容も適当にこさえて、その部品を配置したいqmlに部品の名前を書いてあげればよいです。
部品を使いたいqmlのファイルの先頭には部品があるフォルダをimportします。

部品をつくる

手前味噌から例を出します。
ApplicationWindowにあるAsm_togglesという部品を置くために、Asm_toggles.qmlファイルを作った、というわけです。
部品は更にサブの部品で構成することができるので、Asm_togglesParts_toggleという部品の集まりで構成されています。
部品のファイルの書き方は……書けるように書きますが、たいていItemとかRectangleとかを一番大きなくくり(つまりはベースですね)にすると思います。

部品を置く(import)

部品を子、部品を置くqmlを親とした場合、親のファイルの先頭らへんで子のフォルダをimportします。
私のmain.qmlではAsm_togglesがitemフォルダにあるので下記のように書いています。
import "qrc:/item/"
同じフォルダに親と子がいる場合はこう書くことが多いと思います。
import "."
気持ち的にフォルダごとインクルードというかインポートするのは乱暴な感じですが、qmlファイルのimportはqmlファイル単体を指定してもうまくできないようです。

備考

  • Itemをベースにした自作のオブジェクトどうしを並べようとすると互いにめり込む時があります。そういうときはimplicitHeightなどを活用しましょう。(implicitHeightについて、私の説明は前回の記事です)
  • 親子間のプロパティの参照については次回以降で説明します。