QMLの値型

QMLは組み込みおよびカスタムの値型をサポートしています。

値型とは、intstring のように、参照ではなく値で渡される概念的な型のことです。 これはQMLのオブジェクト型とは対照的です。オブジェクト型は参照によって渡されます。オブジェクト型のインスタンスを2つの異なるプロパティに割り当てた場合、どちらのプロパティも同じ値を持ちます。オブジェクトの変更は両方のプロパティに反映されます。値型のインスタンスを2つの異なるプロパティに割り当てた場合、プロパティは別々の値を持ちます。一方を変更しても、もう一方はそのままです。値型は概念的に値で渡されるだけで、JavaScriptのオブジェクトであるかのように操作することが可能でなければならないからです。これを容易にするために、JavaScriptコードからアクセスする際には、実際には値型参照として渡されます。

オブジェクト型とは異なり、値型はQMLオブジェクトの宣言には使えません。例えば、int{} オブジェクトやsize{} オブジェクトを宣言することはできません。

例えば、 オブジェクトや オブジェクトを宣言することはできません:

  • 単一の値(例えばint は単一の数値を指します)
  • プロパティとメソッドを含む値(例えば、size は、widthheight プロパティを持つ値を指します。)
  • 汎用型var 。他のどの型の値も保持できますが、それ自体が値型です。

変数やプロパティが値型を保持し、それが別の変数やプロパティに代入されると、値のコピーが作成される。

利用可能な値型

いくつかの値型はデフォルトでエンジンにサポートされており、使用するためにimport文を必要としません。以下に列挙する値型は、以下の例外を除き、すべてQML文書内でproperty

  • void値がないことを示す
  • list はオブジェクト型または値型と組み合わせて要素として使用しなければなりません。
  • enumeration 列挙は登録されたQMLオブジェクト型によって定義されなければならないため、直接使用することはできません。

QML言語が提供する組み込みの値型

QML言語でネイティブにサポートされている組み込みの値型を以下に示します:

bool

バイナリ真偽値

date

日付値

double

倍精度小数点付き数値

enumeration

名前付き列挙値

int

整数(例:0、10、-20

list

QMLオブジェクトのリスト

real

小数点以下の数値

string

自由形式のテキスト文字列

url

リソースロケータ

var

汎用プロパティ型

variant

汎用プロパティ型

void

空の値型

QMLモジュールが提供する値型

QMLモジュールはQML言語を拡張し、より多くの値型を提供することができます。

例えば、QtQml モジュールが提供する値型は以下の通りです:

point

x属性とy属性を持つ値

rect

x、y、width、height属性を持つ値

size

幅と高さの属性を持つ値

QtQuick

color

ARGBカラー値

font

QFontのプロパティを持つフォント値。 フォント・タイプは、QFontのプロパティを持つフォント値を指します。

matrix4x4

matrix4x4 型は、4 行 4 列の行列です。

quaternion

quaternion型はスカラー、x、y、z属性を持つ。

vector2d

vector2d型は、x属性とy属性を持ちます。

vector3d

x、y、z属性を持つ値

vector4d

vector4d 型は x、y、z、および w 属性を持ちます。

Qt グローバル・オブジェクトは、Qt QmlQt 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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。