C
Qt Quick Ultraliteレイヤーの例
Qt Quick Ultralite でのレイヤーの使用方法を解説します。
概要
この例では、SpriteLayer 、ItemLayer 、およびImageLayer を使用して、Layers QML モジュールでアプリケーションを作成する方法を示します。このアプリケーションには、次の 3 つのページが含まれています。
- Layers はメインのユーザーインターフェースを定義します。layers.qml を参照してください。
- 「Animating item layer」は、テキスト、Qtロゴ、およびアニメーションを実演するための動く長方形を含む単一の白い長方形のコンテンツを定義します。詳細はAnimatingItemLayer.qml を参照してください。
- 「Moving item layer」は、動くQtロゴのアニメーションを定義します。詳細はMovingImageLayer.qmlを参照してください。

対象プラットフォーム
プロジェクト構造
layers の例は、CMakeLists.txt 、layers.qml 、MovingImageLayer.qml 、AnimatingItemLayer.qml 、background-big.png 、qt-logo.png の 6 つのファイルで構成されています。
CMakeプロジェクトファイルには、基本的なビルドスクリプトが含まれています。
layers.qml SpriteLayer の使用方法を示しています。 は の使用方法を示すために使用され、 は itemLayer の使用方法を示しています。MovingImageLayer.qml ImageLayer AnimatingItemLayer.qml
このプロジェクトには、background-big.png とqt-logo.png の 2 つの画像が含まれています。
CMake プロジェクトファイル
CMake プロジェクトファイルでは、background-big.png の色深度を 16 bpp に設定する QmlProject 構成を使用しており、32 bpp の画面上で 16 bpp の画像をブレンドする方法を示しています。
...
ImageFiles {
files: [
"background-big.png"
]
MCU.resourceImagePixelFormat: "RGB565"
}
...レイヤー
layers.qml ファイルは、メインのユーザーインターフェースを記述しています。
レイヤーを区別するために、テキストと画像を含む 3 つの白い長方形が作成されています。各長方形には、重ね合わせ順序を定義するための異なる Z 値と、レイヤーのコンテンツが更新される頻度を定義するための異なるリフレッシュ間隔が設定されています。
- SpriteLayer ID が spriteLayer32bpp のレイヤーでは、6 つの動く Qt ロゴが作成され、Z 値を使用して各レイヤーの重ね合わせ順序を定義する方法が示されています。SpriteLayer には、スプライトまたはサブレイヤーと呼ばれる複数の画像およびアイテムレイヤーを含めることができます。
- ItemLayer IDがbpp32layerのレイヤーは、異なるリフレッシュ間隔を持つアイテムのレンダリングを実演します。この例では、赤いボックスは4回に1回のリフレッシュ間隔で移動します。レンダリングヒントは、バックエンドが適切なレイヤー実装を選択し、特定のヒントが有効な場合に若干異なるレンダリング手法を使用するための手段です。この例では、速度の最適化よりもサイズの最適化を優先するようプラットフォームに指示しています。
- SpriteLayer IDがspriteLayer16bppの例では、16 bppの背景画像と、ItemLayer のアイテムを、32 bppの画面上でブレンドする様子を示しています。
import QtQuick 2.15 import QtQuickUltralite.Layers 2.0 ApplicationScreens { Screen { id: screen ... AnimatingItemLayer { id: bpp32layer z: 2 ... renderingHints: ItemLayer.OptimizeForSize refreshInterval: 4 colorDepth: 32 opacity: 0.6 } SpriteLayer { id: spriteLayer32bpp z: 4 ... AnimatingItemLayer { z: 2 ... } Repeater { model: 6 MovingImageLayer { z: 1 container: spriteLayer32bpp source: "qt-logo.png" } } } SpriteLayer { id: spriteLayer16bpp z: 0 ... ImageLayer { id: background z: 0 anchors.centerIn: parent source: "background-big.png" } AnimatingItemLayer { z: 1 ... colorDepth: 16 depth: ItemLayer.Bpp16 } } AnimatingItemLayer { depth: ItemLayer.Bpp16Alpha z: 1 width: screen.boxWidth height: screen.boxHeight anchors.right: spriteLayer16bpp.right anchors.bottom: spriteLayer16bpp.bottom anchors.margins: screen.marginWidth colorDepth: 16 opacity: 0.6 } }
AnimatingItemLayer
AnimatingItemLayer.qml は、テキスト、Qtロゴ、および動く赤いボックスを含む白い長方形からなる単一のItemLayer を作成します。ItemLayer は、動的なQt Quick Ultraliteアイテムを含めることができるレイヤーです。この例では、AnimatingItemLayerはcolorDepthプロパティを使用して、ItemLayer の色深度を設定しています。
import QtQuick 2.15 import QtQuickUltralite.Layers 2.0 ItemLayer { id: itemLayer property int colorDepth: 32 property real t: 0 depth: (colorDepth === 32) ? ItemLayer.Bpp32 : ItemLayer.Bpp16Alpha ... Rectangle { anchors.fill: parent color: "white" Rectangle { id: textBox ... Column { id: textColumn ... Text { text: colorDepth + " bpp item layer" ... } Text { text: "Refresh interval: " + itemLayer.refreshInterval ... } } } Image { ... source: "qt-logo.png" } Rectangle { ... color: "red" } } }
MovingImageLayer
MovingImageLayer.qml は、単一のImageLayer を作成し、そのアニメーションを定義します。
import QtQuick 2.15 import QtQuickUltralite.Layers 2.0 ImageLayer { id: root Component.onCompleted: { root.x = 1 + Math.floor(Math.random() * (container.width - root.width - 2)) root.y = 1 + Math.floor(Math.random() * (container.height - root.height - 2)) ... } onTChanged: { root.x += vx root.y += vy ... } property real t: 0 NumberAnimation on t { running: true loops: Animation.Infinite from: 0 to: 1 } }
ファイル:
- layers/AnimatingItemLayer.qml
- layers/CMakeLists.txt
- layers/MovingImageLayer.qml
- layers/layers.qml
- layers/mcu_layers.qmlproject
- layers/mcu_layers_background_nocaching.qmlproject
画像:
特定のQtライセンスの下で利用可能です。
詳細はこちら。