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 グローバル・オブジェクトは、useful functions 。 Qt Qmlと Qt Quickモジュールの値を操作するためのものです。
他の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の型システムも参照してください 。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.