このページでは

C

Qt Quick UltraliteとQt Quick

概要

既知の問題」または「制限事項」のリストも参照してください。

画像リソースの取り扱い

すべての画像は、Qt Quick のUltraliteリソースシステムを使用してビルド時に登録し、Qt QuickUltraliteアセット保存形式に変換する必要があります。デフォルトでは、画像はバイナリ自体に含まれます。「外部ストレージからのリソース」で説明されているように、外部ストレージから画像を読み込む場合でも、ビルド時に登録および変換を行う必要があります。

画像の最適化

一部のプラットフォームでは、変換を使用して画像を回転または拡大縮小する場合、画像を別の形式でコンパイルした方が有利な場合があります。この最適化を有効にするには、画像リソースに対してImageFiles.MCU.resourceOptimizeForRotationまたはImageFiles.MCU.resourceOptimizeForScaleという QmlProjectProperty を設定してください。 例:

ImageFiles{
    files: ["images/my_image.png"]
    MCU.resourceOptimizeForRotation: true
    MCU.resourceOptimizeForScale: true
}

アプリケーションにおいて、アイコン画像は通常、アルファ透過を持つ単一の色で構成されています。Qt Quick Ultraliteはこのような画像を検出し、最適化されたアルファマップ形式で保存します。これは、画像が単一の色で構成されている場合に有効です。画像に大きな透明な余白がある場合、画像は自動的にトリミングされます。

スクリプト式

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 を使用することで、白い背景を明示的に指定することができます:

Rectangle {
    Item {
        width: 200; height: 200
        Rectangle {
            width: 100; height: 100
            anchors.centerIn: parent
            color: "red"
        }
    }
}

特定のQtライセンスの下で利用可能です。
詳細はこちら。