C
Qt Quick UltraliteとのAPIレベル以外の相違点Qt Quick
概要
- ECMAScriptのサポートに制限がある
- 画像リソースの扱いが異なる
- 画像は回転や拡大縮小に最適化される可能性がある
- モデル、ビュー、デリゲートの違い
- States 各 QML ファイルのルートアイテムでのみ使用可能
onClicked: PropertyAnimation { ... }アニメーションはシグナルハンドラとして使用できません。- サポートされるeasing curves のセットは限られています。
- 他のファイルで宣言されたコンポーネントのidを参照することは無効です。
- アプリケーションは白い背景には描画されません。
既知の問題または制限のリストも参照してください。
画像リソースの取り扱い
すべてのイメージは、ビルド時にQt Quick Ultralite リソースシステムを使って登録し、Qt Quick Ultralite アセットストレージフォーマットに変換する必要があります。デフォルトでは、イメージはバイナリ自体に含まれます。外部ストレージからのリソースで説明されているように、外部ストレージからイメージを読み込む場合も、ビルド時に登録・変換する必要があります。
イメージの最適化
プラットフォームによっては、画像を回転または拡大縮小するために変換を使用する場合、画像を別のフォーマットでコンパイルすることが有益な場合があります。この最適化を有効にするには、画像リソースにImageFiles.MCU.resourceOptimizeForRotationまたはImageFiles.MCU.resourceOptimizeForScaleQmlProjectProperty を設定します。例
ImageFiles{
files: ["images/my_image.png"]
MCU.resourceOptimizeForRotation: true
MCU.resourceOptimizeForScale: true
}アプリケーションでは、アイコン画像は通常アルファ透過の単一色のみです。 Qt Quick Ultraliteはそのような画像を検出し、最適化されたアルファマップ形式で保存します。これは画像が1色しかない限り機能します。画像に大きな透明ボーダーがある場合、画像は自動的に切り取られます。
スクリプト表現
Qt Quick UltraliteはECMAScript言語仕様を完全にサポートしておらず、APIの最小限のサブセットしか実装されていません。しかし、以下のような場合にはスクリプト式を使用することができます:
- プロパティバインディングのボディ。これらのスクリプト式は、QMLオブジェクトのプロパティ間の関係を記述します。プロパティの依存関係が変更されると、指定された関係に従ってプロパティも自動的に更新されます。
- シグナルハンドラのボディ。これらのスクリプトは、QML オブジェクトが関連するシグナルを発するたびに自動的に評価されます。
- カスタムメソッドの定義。QML オブジェクトの本体内で定義されたスクリプト関数は、そのオブジェクトのメソッドとなります。
Qt Quick UltraliteはスタンドアロンJavaScriptリソース(.js)ファイルの使用をサポートしていません。カスタムスクリプトメソッドを定義するとスクリプトコードがC++コードに変換されるので、引数の型を宣言することが重要です。メソッドが値を返す場合は、メソッドのシグネチャ内で戻り値の型を宣言する必要があります。関数内部では、var 変数を使用することができますが、型を推論するためには必ず初期化する必要があります:
function getColor(i : int, pressed: bool) : color { var isEven = i % 2 == 0 if (pressed) { return "#AAFFAA" } else if (isEven) { return "#AACCAA" } return "#CCAACC" }
Model-View-Delegateパターン
モデル
Qt Quick Ultraliteでは、ListModels は読み取り専用で、別ファイルでモデルを定義することに制限があります。詳しくは Qt Quick Ultraliteのモデルとビューを参照してください。
役割アクセス
Qt Quick とは異なり、モデルのロールへの非限定的なアクセスは、対応する必須プロパティがデリゲートで宣言されている場合にのみ許可されます:
ListModel {
id: model
ListElement {
cost: "2.45"
}
}
ListView {
model: model
delegate: Text {
required property string cost
text: cost
}
}デリゲート
Qt Quick Ultraliteでは、デリゲートが使用されるのと同じファイルで宣言されている必要があります。
実行時のメモリフットプリントを最適化し、動的な割り当てを避けるために、デリゲートは一定数しか作成されません。デリゲートの正確な数はコンパイル時に推定され、その推定はビューコンテナのサイズとデリゲートのサイズに基づいて行われます。
作成されるデリゲートの数は、可視デリゲートの数よりも多くなります。例えば、これによってスムーズなスクロールが可能になります。一度不可視になったデリゲートは再利用することができ、すぐに可視になる要素に対応するデータで埋めることができます。
白い背景なし
Qt Quick Ultraliteは白い背景にアプリケーションを描画しません。レンダリングのアーチファクトを避けるために、アプリケーションは透明な領域を持たないようにしなければなりません。
例えば、次の例では、Qt Quick で白い背景に赤い四角形を描画しています:
Item { width: 200; height: 200 Rectangle { width: 100; height: 100 anchors.centerIn: parent color: "red" } }
Qt Quick Ultraliteでは、この例の白い領域は描画されません。つまり、初期フレームバッファデータが見えている可能性があり、この領域上のアニメーションは古いグラフィックを適切にクリアできません。
白い背景は、ルート要素として白いRectangle を使用することで、明示的に提供することができます:
特定の Qt ライセンスの下で利用可能です。
詳細はこちら。