Binding QML Type
プロパティのバインディングを自由に作成できるようになります。詳細...
| Import Statement: | import QtQml |
プロパティ
- delayed : bool
- property : string
- restoreMode : enumeration
- target : QtObject
- value : var
- when : bool
詳細な説明
QMLでは、プロパティのバインディングにより、異なるオブジェクトのプロパティ間に依存関係が生じます。
アクセスできないプロパティへのバインディング
場合によっては、C++ によって QML にエクスポートされたクラスのプロパティなど、QML によって直接インスタンス化されていない別のオブジェクトのプロパティに、あるオブジェクトのプロパティをバインドする必要があることがあります。この依存関係を確立するには、Binding 型を使用できます。これにより、任意の値を任意のオブジェクトのプロパティにバインドできます。
たとえば、「app.enteredText」プロパティを QML にマッピングする C++ アプリケーションでは、Binding を使用して enteredText プロパティを更新することができます。
TextEdit { id: myTextField; text: "Please type here..." }
Binding { app.enteredText: myTextField.text }text が変更されると、C++ のプロパティenteredText が自動的に更新されます。
条件付きバインディング
場合によっては、特定の条件が満たされたときにプロパティの値を変更し、それ以外の場合は変更しないようにしたいことがあります。多くの場合、考えられるすべての分岐に対して値を指定する必要があるため、直接バインディングではこれを実現することはできません。
たとえば、以下のコードスニペットでは、マウスを離すたびに警告が表示されます。これは、マウスが押されていないとき、バインディングの値が未定義になるためです。
// produces warning: "Unable to assign [undefined] to double value"
targetProperty: if (mouse.pressed) mouse.mouseXBinding 型を使用すれば、この警告を防ぐことができます。
Binding on targetProperty {
when: mouse.pressed
value: mouse.mouseX
}Binding 型は、そのプロパティに対して以前に設定された直接バインディングを復元します。
ただし、Binding のvalue プロパティへのバインディングは、when がfalse である場合でも、無条件に評価されます。
これにより、例えば、値がnull になるのを防ぐためにBindingが使用されている場合などに、警告が発生する可能性があります:
Binding on targetProperty {
when: root.object !== null
// produces warning: "TypeError: Cannot read property 'someProperty' of null"
value: root.object.someProperty
}この問題を回避するには、2つの方法があります:
- ターゲットに「
id」が設定されている場合は、Multiple targets in one Binding で説明されている構文を使用できます。これにより、Bindingが有効な場合にのみバインディング式が実行されるようになります:Binding { when: root.object !== null root.targetProperty: root.object.someProperty } - バインディング内でチェックを繰り返し、早期に処理を終了させることもできます:
Binding on targetProperty { when: root.object !== null value: { if (root.object === null) return return root.object.someProperty } }
1つのBinding要素内の複数のターゲット
1つのBinding要素内で、同じオブジェクトに対する複数のバインディングを指定できます:
Text {
id: t1
}
Binding {
t1 {
color: "#00FF00"
text: "green text"
}
}また、1つのBinding要素内で、ターゲットオブジェクトが異なる複数のバインディングを指定することもできます:
Text {
id: t1
}
Text {
id: t2
}
Binding {
t1.text: "Foo"
t2.text: "Bar"
}関連項目 Qt Qml.
プロパティのドキュメント
delayed : bool
このプロパティは、バインディングを遅延させるかどうかを指定します。
遅延バインディングでは、ターゲットは即座に更新されず、イベントキューがクリアされるまで待機します。これは最適化として、あるいは中間値が割り当てられるのを防ぐために使用できます。
Binding {
contactName.text.value: givenName + " " + familyName
when: list.ListView.isCurrentItem
delayed: true
}注: delayed プロパティを使用すると 、Binding 要素が値に対するプロキシを作成して、実際のターゲットへの適用を遅延させる必要があるため、実行時のオーバーヘッドが発生します。target およびproperty プロパティを使用する場合、value プロパティをプロキシとして再利用できるため、このコストは低くなります。上記の形式を使用する場合、Binding はプロキシ値を保持するために、動的なメタオブジェクトを持つ別のオブジェクトを割り当てます。
property : string
更新対象のプロパティ。
式の結果として値型のプロパティにアクセスすることになる場合、これはグループプロパティにすることができます。例:
Item {
id: item
property rect rectangle: Qt.rect(0, 0, 200, 200)
}
Binding {
target: item
property: "rectangle.x"
value: 100
}このプロパティを使用する必要があるのは、バインディングのターゲットを宣言的に指定できない場合のみです。以下のコードスニペットは、上記のバインディングと同等ですが、より簡潔です:
Binding { item.rectangle.x: 100 }restoreMode : enumeration
このプロパティは、バインディングが無効化された際に、元の値を復元すべきかどうか、またその方法を指定するために使用できます。
取り得る値は次のとおりです:
| Constant | 説明 |
|---|---|
Binding.RestoreNone | 元の値は一切復元されません |
Binding.RestoreBinding | 元の値が別のバインディングであった場合、元の値が復元されます。その場合、以前のバインディングが再び有効になります。 |
Binding.RestoreValue | バインディングではなく単純な値であった場合、元の値が復元される。 |
Binding.RestoreBindingOrValue | 元の値は常に復元されます。 |
デフォルト値は `Binding.RestoreBindingOrValue` です。
注:このプロパティは 、以前のバージョンのQtとの下位互換性を確保するために存在します。新しいコードでは使用しないでください。
target : QtObject
更新対象のオブジェクト。バインディングのターゲットにid 属性がない場合(たとえば、ターゲットがシングルトンである場合など)、このプロパティを使用する必要があります。それ以外の場合は、次の2つのコードは同等です:
Binding { contactName.text: name }Binding {
target: contactName
property: "text"
value: name
}前者のコードははるかに簡潔ですが、実行時にターゲットオブジェクトやプロパティを置き換えることはできません。後者のコードであれば、それが可能です。
value : var
ターゲットオブジェクトおよびプロパティに設定する値。これは定数(あまり有用ではありませんが)か、バインドされた式です。
このプロパティを使用する必要があるのは、バインディングのターゲットを宣言的に指定できない場合のみです。それ以外の場合は、ターゲットに直接バインドすることができます。
when : bool
このプロパティは、バインディングがアクティブな場合に有効になります。バインディングをアクティブにしたい場合は、真となる式をここに設定してください。
Binding {
contactName.text: name
when: list.ListView.isCurrentItem
}デフォルトでは、バインディングが非アクティブになると、以前に設定されていたバインディングや値が復元されます。restoreMode プロパティを使用することで、この復元動作をカスタマイズできます。
「restoreMode」も参照してください 。
© 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.