QML Tutorial 和訳
QML Tutorial
このチュートリアルはQMLの紹介をするもので、Qt Quick UIsのための言語です。全てをカバーしません。:強調したいのは、主要な原理を教えること、そして機能が必要に応じて紹介されるということです。
このチュートリアルの異なるステップを通してQML値の型について学びますが、プロパティとシグナルで独自のQMLコンポーネントを作りますし、ステートと遷移を利用して単純なアニメーションを作ります。第一章は最小限の"Hello World"プログラムで始め、次の章は新しい概念を紹介します。
チュートリアルのソースコードは、examples/quick/tutorials/helloworldディレクトリにあります。
チュートリアル 章:
1.値 型
2.QML コンポーネンツ
3.ステート(状態)と遷移
QML Tutorial 1 - Value Types
この最初のプログラムはとてもシンプルな"Hello World"エグザンプルで、いくつかの基本的なQMLの概念を紹介するものです。下記の図がこのプログラムのスクリーンショットです。
Here is the QML code for the application:
こちらがそのアプリケーションのQMLコードです。
import QtQuick
Rectangle {
id: page
width: 320; height: 480
color: "lightgray"
Text {
id: helloText
text: "Hello world!"
y: 30
anchors.horizontalCenter: page.horizontalCenter
font.pointSize: 24; font.bold: true
}
}
Walkthrough
(ウォークスルー:<内部を歩くなどのシミュレーションができるコンピュータによる建物のモデル映像>)
Import
最初に、私たちはこのエグザンプルのために必要な型をインポートする必要があります。ほとんどのQMLファイルはQtについている組み込み型のQML型をインポートします。(Rectangle, Image, …のように)
import QtQuick
Rectangle Type
Rectangle {
id: page
width: 320; height: 480
color: "lightgray"
我々はRectangle型のルートオブジェクトを宣言します。QMLでアプリを作るために使うことのできる基本的な構築ブロックの一つです。我々は後でそれを参照できるようにするためのidを与えます。この場合、それに"page"と名付けます。width,heightそしてcolorプロパティも設定します。Rectangle型は多くの他のプロパティ(例えばxとy)を持ちますが、これらはデフォルト値のままにしています。
Text Type
Text {
id: helloText
text: "Hello world!"
y: 30
anchors.horizontalCenter: page.horizontalCenter
font.pointSize: 24; font.bold: true
}
Rectangle型の子として"Hello World!"を表示する加えText型を加えます。
yプロパティはその親の上部から垂直に30ピクセルの場所にテキストを配置するために使います。
anchors.horizontalCenterプロパティはある型の垂直の中央を参照します。この場合、私たちはテキスト型がページ要素内で水平線上に中心にあるべきということを指定します。(Anchor-Based Layoutを見てください。)
font.pointSizeとfont.boldプロパティはフォントに関連するプロパティで、ドット表記を利用します。
Viewing the Example
あなたが作成したものを見るために、最初の引数としてファイルの名前でqml tool(binディレクトリ内にあります)を実行します。例えば、インストールの場所から提供され、完成したチュートリアル1のエグザンプルを実行するには、
qml tutorials/helloworld/tutorial1.qml
とタイプします。
QML Tutorial 2 - QML Components
この章はテキストの色を変えるためのカラーピッカーを加えます。
私たちのカラーピッカーは異なる色で6つのセルから成っています。それぞれのセルで同じコードを何回も書くのを避けるために、新しいCellコンポーネントを作ります。コンポーネントは他のQMLファイルで再利用できる新しい型を定義する方法を提供します。QMLコンポーネントはブラックボックスのようであり、プロパティ、シグナルそして関数を通して外の世界と相互作用し、一般的にそれ自体のQMLファイルの中で定義されます。(詳細には、Componentドキュメントを見てください。)コンポーネントのファイル名は常にキャピタルレターで始めなければなりません。
Here is the QML code for Cell.qml:
import QtQuick
Item {
id: container
property alias cellColor: rectangle.color
signal clicked(cellColor: color)
width: 40; height: 25
Rectangle {
id: rectangle
border.color: "white"
anchors.fill: parent
}
MouseArea {
anchors.fill: parent
onClicked: container.clicked(container.cellColor)
}
}
Walkthrough
The Cell Component
Item {
id: container
property alias cellColor: rectangle.color
signal clicked(cellColor: color)
width: 40; height: 25
私たちのコンポーネントのルート型はid:containerのアイテムです。あるItemは最も基本的なQML内の可視型で、他の型のコンテナとしてよく利用されます。
property alias cellColor: rectangle.color
私たちはcellColorプロパティを宣言します。このプロパティはコンポーネントの外からアクセス可能であり、これは異なる色でセルを生成することができます。このプロパティは存在しているプロパティ-セルを構成する矩形の色(Property Bindingを見てください)のちょうどエイリアスになります。
signal clicked(cellColor: color)
我々はコンポーネントが型色のcellColorパラメータでclickedを呼ぶシグナルも持ってほしいと思います。このシグナルを後でain QMLファイル内のテキストの色を変更するために使います。
Rectangle {
id: rectangle
border.color: "white"
anchors.fill: parent
}
セルコンポーネントは基本的にid rectangleで色付けされた矩形です。anchors.fillプロパティは可視型のサイズを設定する便利な方法です。この場合矩形はその親と同じサイズを持ちます。(Anchor Based Layoutを見てください。)
MouseArea {
anchors.fill: parent
onClicked: container.clicked(container.cellColor)
}
セルをクリックするときにテキストの色を変化させるため、親として同じサイズでMouseArea型を作ります。MouseAreaはclickedと呼ばれるシグナルを定義します。このシグナルが発行されるとき、我々は引数として色で、独自のclickedシグナルを発行したいです。
The Main QML File
main QMLファイル内で、カラーピッカーを作るためのセルコンポーネントを使います。
import QtQuick
Rectangle {
id: page
width: 320; height: 480
color: "lightgray"
Text {
id: helloText
text: "Hello world!"
y: 30
anchors.horizontalCenter: page.horizontalCenter
font.pointSize: 24; font.bold: true
}
Grid {
id: colorPicker
x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4
rows: 2; columns: 3; spacing: 3
Cell { cellColor: "red"; onClicked: helloText.color = cellColor }
Cell { cellColor: "green"; onClicked: helloText.color = cellColor }
Cell { cellColor: "blue"; onClicked: helloText.color = cellColor }
Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor }
Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor }
Cell { cellColor: "black"; onClicked: helloText.color = cellColor }
}
}
グリッド内で異なる色で6セルを置くことによってカラーピッカーを作ります。
Cell { cellColor: "red"; onClicked: helloText.color = cellColor }
セルのclickedシグナルが発行されるとき、テキストの色を、引数として渡されるcellColorへ設定したい。'onSignalName'(Signal Attributesを見てください)名のプロパティを通してコンポーネントのいくつかのシグナルに反応できます。
QML Tutorial 3 - States and Transitions
この章では、ステート(状態)とトランジション(遷移)を紹介することによってちょっとだけより動的なエグザンプルを作ります。
我々はクリックされた時、テキストがスクリーンの底へ移動し、そして赤くなるようになってほしいです。
Here is the QML code:
こちらがQMLのコードです。
import QtQuick
Rectangle {
id: page
width: 320; height: 480
color: "lightgray"
Text {
id: helloText
text: "Hello world!"
y: 30
anchors.horizontalCenter: page.horizontalCenter
font.pointSize: 24; font.bold: true
MouseArea { id: mouseArea; anchors.fill: parent }
states: State {
name: "down"; when: mouseArea.pressed == true
PropertyChanges {
helloText {
y: 160
rotation: 180
color: "red"
}
}
}
transitions: Transition {
from: ""; to: "down"; reversible: true
ParallelAnimation {
NumberAnimation { properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad }
ColorAnimation { duration: 500 }
}
}
}
Grid {
id: colorPicker
x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4
rows: 2; columns: 3; spacing: 3
Cell { cellColor: "red"; onClicked: helloText.color = cellColor }
Cell { cellColor: "green"; onClicked: helloText.color = cellColor }
Cell { cellColor: "blue"; onClicked: helloText.color = cellColor }
Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor }
Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor }
Cell { cellColor: "black"; onClicked: helloText.color = cellColor }
}
}
Walkthrough
states: State {
name: "down"; when: mouseArea.pressed == true
PropertyChanges {
helloText {
y: 160
rotation: 180
color: "red"
}
}
}
最初に、我々はテキスト型のために新しい"down"ステートを作ります。このステートはMouseAreaが押されるときにアクティブ化され、そして放されるときに非アクティブ化されます。"down"ステートは暗黙的なデフォルトのステート(状態)(それらが最初にQML内で定義されているアイテム)から変化する1セットのプロパティを含みます。特に、テキストのyプロパティを160に設定し、180度の回転と、色を赤にします。
transitions: Transition {
from: ""; to: "down"; reversible: true
ParallelAnimation {
NumberAnimation { properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad }
ColorAnimation { duration: 500 }
}
}
我々は瞬時に底辺にテキストが現れてほしくないが、かなりスムーズに動いて、二つの状態の間に遷移を加えます。
from と to は遷移が走る両者間の状態を定義します。この場合、初期状態からdownステートへ遷移してほしいです。我々はdownステートから初期ステートへ戻るように変化するとき、逆に同じ遷移を実行したいので、reversibleをtrueに設定します。これは二つの遷移を別別に記述することと同じです。ParallelAnimation型がアニメーションの二つの型(数と色)が同時にスタートすることを保証してくれます。我々はSequentialAnimationを代わりにりようすることで、次から次へひとつずつそれらを実行することもできます。状態と遷移の詳細は、Qt Quick Statesと states and transitions exampleを見てください。