このページでは

QMLの値型

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

値型とは、int やstring など、概念的には参照ではなく値として渡される型のことです。これはQMLオブジェクト型とは対照的です。オブジェクト型は参照として渡されます。 オブジェクト型のインスタンスを2つの異なるプロパティに代入した場合、両方のプロパティは同じ値を保持します。オブジェクトを変更すると、その変更は両方のプロパティに反映されます。値型のインスタンスを2つの異なるプロパティに代入した場合、各プロパティは別々の値を保持します。一方を変更しても、もう一方は変更されません。 値型は、JavaScript オブジェクトであるかのように操作できる必要があるため、概念的には値渡しで渡されるだけです。これを可能にするため、実際には JavaScript コードからアクセスする際には、値型参照として渡されます。

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

値型は、以下のものを参照するために使用できます:

  • 単一の値(例:int は単一の数値を指します)
  • プロパティやメソッドを含む値(例:size は、width およびheight プロパティを持つ値を参照します)
  • ジェネリック型 `var`。これは他の任意の型の値を格納できますが、それ自体は値型です。

変数やプロパティが値型を保持しており、それが別の変数やプロパティに代入される場合、その値のコピーが作成されます。

利用可能な値型

一部の値型はエンジンによってデフォルトでサポートされており、使用するためにインポート文を必要としませんが、他の値型については、クライアントがそれらを提供するモジュールをインポートする必要があります。以下に挙げるすべての値型は、QMLドキュメント内でproperty 型として使用できますが、以下の例外があります:

  • void、これは値が存在しないことを示す
  • list は、要素としてオブジェクトまたは値型と組み合わせて使用する必要があります

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

QML言語でネイティブにサポートされている組み込み値型は、以下の通りです:

bool

真/偽を表すバイナリ値

date

日付値

double

小数点を含む数値(倍精度で格納)

int

整数(例:0、10、-20など)

list

QMLオブジェクトのリスト

real

小数点を含む数値

string

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

url

リソースロケータ

var

汎用プロパティ型

variant

汎用プロパティ型

void

空の値型

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

QMLモジュールは、QML言語にさらなる値型を追加することができます。

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

easingCurve

イージングカーブを表す値

point

x および y 属性を持つ値

qmlProperty

オブジェクトのプロパティを参照する値

rect

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

size

widthおよびheight属性を持つ値

QtQuick モジュールが提供する値の型は以下の通りです:

color

ARGB カラー値

font

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

matrix4x4

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

quaternion

クォータニオン型は、スカラー、x、y、zの属性を持つ

vector2d

vector2d 型は、x および y 属性を持つ

vector3d

x、y、z の属性を持つ値

vector4d

vector4d 型は、x、y、z、および w 属性を持つ

グローバルオブジェクト `Qt ` は、値型 `value` の値を操作するための `useful functions ` を提供します。 Qt Qml および Qt Quick モジュールで、値型の値を操作するためのxml-ph-0001@deepl.internalを提供します。その他のQtモジュールについては、それぞれのモジュールページで値型に関する説明が記載

その他の 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 型システム」も参照してください 。

© 2026 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.