QMLの値型
QMLは組み込みおよびカスタムの値型をサポートしています。
値型とは、int
やstring
のように、参照ではなく値で渡される概念的な型のことです。 これはQMLのオブジェクト型とは対照的です。オブジェクト型は参照によって渡されます。オブジェクト型のインスタンスを2つの異なるプロパティに割り当てた場合、どちらのプロパティも同じ値を持ちます。オブジェクトの変更は両方のプロパティに反映されます。値型のインスタンスを2つの異なるプロパティに割り当てた場合、プロパティは別々の値を持ちます。一方を変更しても、もう一方はそのままです。値型は概念的に値で渡されるだけで、JavaScriptのオブジェクトであるかのように操作することが可能でなければならないからです。これを容易にするために、JavaScriptコードからアクセスする際には、実際には値型参照として渡されます。
オブジェクト型とは異なり、値型はQMLオブジェクトの宣言には使えません。例えば、int{}
オブジェクトやsize{}
オブジェクトを宣言することはできません。
例えば、 オブジェクトや オブジェクトを宣言することはできません:
- 単一の値(例えばint は単一の数値を指します)
- プロパティとメソッドを含む値(例えば、size は、
width
とheight
プロパティを持つ値を指します。) - 汎用型var 。他のどの型の値も保持できますが、それ自体が値型です。
変数やプロパティが値型を保持し、それが別の変数やプロパティに代入されると、値のコピーが作成される。
利用可能な値型
いくつかの値型はデフォルトでエンジンにサポートされており、使用するためにimport文を必要としません。以下に列挙する値型は、以下の例外を除き、すべてQML文書内でproperty
:
void
値がないことを示すlist
はオブジェクト型または値型と組み合わせて要素として使用しなければなりません。enumeration
列挙は登録されたQMLオブジェクト型によって定義されなければならないため、直接使用することはできません。
QML言語が提供する組み込みの値型
QML言語でネイティブにサポートされている組み込みの値型を以下に示します:
バイナリ真偽値 | |
日付値 | |
倍精度小数点付き数値 | |
名前付き列挙値 | |
整数(例:0、10、-20 | |
QMLオブジェクトのリスト | |
小数点以下の数値 | |
自由形式のテキスト文字列 | |
リソースロケータ | |
汎用プロパティ型 | |
汎用プロパティ型 | |
空の値型 |
QMLモジュールが提供する値型
QMLモジュールはQML言語を拡張し、より多くの値型を提供することができます。
例えば、QtQml
モジュールが提供する値型は以下の通りです:
QtQuick
:
ARGBカラー値 | |
QFontのプロパティを持つフォント値。 フォント・タイプは、QFontのプロパティを持つフォント値を指します。 | |
matrix4x4 型は、4 行 4 列の行列です。 | |
quaternion型はスカラー、x、y、z属性を持つ。 | |
vector2d型は、x属性とy属性を持ちます。 | |
x、y、z属性を持つ値 | |
vector4d 型は x、y、z、および w 属性を持ちます。 |
Qt グローバル・オブジェクトは、Qt QmlとQt Quickモジュールの値型の値を操作するためのuseful functions を提供します。
他のQtモジュールは、それぞれのモジュール・ページで値型について説明しています。
C++からQMLの型を定義する」で説明されているように、独自の値型を定義することもできます。特定のQMLモジュールが提供する型を使用するためには、クライアントはQMLドキュメント内でそのモジュールをインポートする必要があります。
値型のプロパティ変更時の動作
例えば、font 型はpixelSize
,family
,bold
のプロパティを持ちます。オブジェクト型のプロパティとは異なり、値型のプロパティは独自のプロパティ変更シグナルを提供しません。プロパティ変更シグナル・ハンドラを作成できるのは、値型のプロパティ自身だけです:
Text { // invalid! onFont.pixelSizeChanged: doSomething() // also invalid! font { onPixelSizeChanged: doSomething() } // but this is ok onFontChanged: doSomething() }
ただし、値型のプロパティ変更シグナルは、プロパティ自体が変更されたときだけでなく、その属性のいずれかが変更されたときにも発信されることに注意してください。例えば、次のコードを見てみよう:
Text { onFontChanged: console.log("font changed") Text { id: otherText } focus: true // changing any of the font attributes, or reassigning the property // to a different font value, will invoke the onFontChanged handler Keys.onDigit1Pressed: font.pixelSize += 1 Keys.onDigit2Pressed: font.b = !font.b Keys.onDigit3Pressed: font = otherText.font }
対照的に、オブジェクト型のプロパティはそれ自身のプロパティ変更シグナルを発し、オブジェクト型のプロパティのプロパティ変更シグナルハンドラは、プロパティが別のオブジェクト値に再割り当てされたときにのみ呼び出されます。
QML型システムも参照してください 。
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。