Binding QML Type

プロパティ・バインディングを任意に作成できるようにします。詳細...

Import Statement: import QtQml

プロパティ

詳細説明

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"
value: if (mouse.pressed) mouse.mouseX

バインディング・タイプはこの警告を防ぐことができます。

Binding on value {
    when: mouse.pressed
    value: mouse.mouseX
}

バインディング・タイプは、プロパティに以前に設定されたダイレクト・バインディングを復元します。

以下も参照してください。 Qt Qml.

プロパティの説明

delayed : bool

このプロパティは、バインディングを遅延させるかどうかを保持します。

遅延バインディングは、ターゲットをすぐに更新せず、イベントキューがクリアされるまで待ちます。これは、最適化として使用したり、中間値が割り当てられないようにしたりすることができます。

Binding {
    contactName.text.value: givenName + " " + familyName
    when: list.ListView.isCurrentItem
    delayed: true
}

注意: delayedプロパティを使用すると、Binding要素が値のプロキシを作成する必要があるため、実際のターゲットへの適用を遅らせることができ、ランタイムコストが発生します。target およびproperty プロパティを使用する場合、value プロパティをプロキシとして再利用できるため、このコストは低くなります。上に示したフォームを使用する場合、バインディングはプロキシ値を保持するために、動的メタオブジェクトを持つ別のオブジェクトを割り当てます。


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

このプロパティは、バインディングが無効化されたときに元の値を復元するかどうか、またどのように復元するかを記述するために使用できます。

可能な値は

定数説明
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

このプロパティは、バインディングがアクティブなときに保持します。これは、バインディングをアクティブにしたいときにtrueと評価される式に設定する必要があります。

Binding {
    contactName.text: name
    when: list.ListView.isCurrentItem
}

デフォルトでは、バインディングが非アクティブになると、以前に設定されたバインディングや値が復元されます。復元動作は、restoreMode プロパティを使用してカスタマイズできます。

restoreModeも参照してください


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