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も参照してください


このドキュメントに含まれるコントリビューションの著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。