PropertyChanges QML Type
状態に対する新しいプロパティのバインディングや値について説明します。詳細...
| Import Statement: | import QtQuick |
プロパティ
- explicit : bool
- restoreEntryValues : bool
- target : QtObject
詳細な説明
PropertyChangesは、State 内のプロパティ値やバインディングを定義するために使用されます。これにより、アイテムが状態を切り替える際に、そのプロパティ値を変更することが可能になります。
PropertyChangesオブジェクトを作成するには、ローカルプロパティにバインドする場合と同様に、対象アイテムのプロパティにバインドします。これにより、新しいプロパティ値やバインディングを定義できます。例:
import QtQuick
Item {
id: container
width: 300; height: 300
Rectangle {
id: rect
width: 100; height: 100
color: "red"
MouseArea {
id: mouseArea
anchors.fill: parent
}
states: State {
name: "resized"; when: mouseArea.pressed
PropertyChanges {
rect {
color: "blue"
height: container.height
}
}
}
}
}マウスが押されると、Rectangle はresized状態に切り替わります。この状態では、PropertyChangesオブジェクトによって、矩形の色は青に設定され、height の値はcontainer.height の値に設定されます。
なお、これにより、サイズ変更状態においてrect.height が自動的にcontainer.height にバインドされます。プロパティのバインドを確立せず、状態変更の時点で高さを単にcontainer.height の値に設定したい場合は、explicit プロパティをtrue に設定してください。
また、PropertyChanges オブジェクトは、オブジェクトのデフォルトのシグナルハンドラを上書きして、新しい状態に固有のシグナルハンドラを実装することもできます。
PropertyChanges {
myMouseArea.onClicked: doSomethingDifferent()
}注:PropertyChanges を使用してアンカーのマージンを変更することはできますが、その他のアンカー値を変更することはできません。その場合は、代わりにAnchorChanges を使用してください。同様に、Item のparent 値を変更するには、代わりにParentChange を使用してください。
プロパティ値のリセット
undefined を使用すると、状態のプロパティ値をリセットできます。次の例では、myText がwiderText状態に移行すると、そのwidth プロパティがリセットされ、テキストが本来の幅になり、文字列全体が 1 行に表示されます。
Rectangle {
width: 300; height: 200
Text {
id: myText
width: 50
wrapMode: Text.WordWrap
text: "a text string that is longer than 50 pixels"
states: State {
name: "widerText"
PropertyChanges { myText.width: undefined }
}
}
MouseArea {
anchors.fill: parent
onClicked: myText.state = "widerText"
}
}トランジションにおけるプロパティの即時変更
トランジションを使用して状態変化をアニメーション化する場合、プロパティは現在の状態の値から新しい状態で定義された値(PropertyChanges オブジェクトによって定義される)へとアニメーションされます。しかし、Transition 中にアニメーションなしでプロパティの値を即座に設定したい場合もあります。このような場合、PropertyAction タイプを使用して、プロパティの即時変更を強制することができます。
詳細については、PropertyAction のドキュメントを参照してください。
注: Item のvisible およびenabled プロパティは 、PropertyChanges内の他のプロパティと完全に同じ挙動を示すわけではありません。これらのプロパティは親の状態を通じて暗黙的に変更される可能性があるため、すべてのPropertyChangesで明示的に設定する必要があります。親のいずれかが有効または表示されていない場合、その子アイテムは有効化または表示されません。
注: Qt 5との下位互換性を確保するため 、target プロパティや、ID を含まない単純なプロパティ名を使用して PropertyChanges を指定することも可能です。例:PropertyChanges { target: myItem; x: 15 } 。target の代わりに ID を使用する形式を推奨します。また、ファイルを編集する場合は、target を含む形式を使用する必要がある場合があります。 Qt Design Studio。なお、 Qt Design Studio 、この形式では処理可能なファイルにさらにいくつかの制限が課される点に注意してください。
「 States」の例、Qt Quick States、および Qt Qmlも参照してください。
プロパティのドキュメント
explicit : bool
explicit が true に設定されている場合、バインディングは代入として解釈されます。式は一度だけ評価され、依存関係が変化しても更新は行われません。
次の例では、`explicit` を追加することで、myItem.width がparent.width にバインドされるのを防いでいます。その代わりに、状態変更の時点でparent.width の値が割り当てられます。
PropertyChanges {
target: myItem
explicit: true
width: parent.width
}デフォルトでは、explicitはfalseです。
restoreEntryValues : bool
このプロパティは、状態を離れる際に以前の値を復元するかどうかを指定します。
デフォルト値はtrue です。この値をfalse に設定すると、プロパティの値に永続的な影響を与える一時的な状態が作成されます。
target : QtObject
このプロパティには、変更対象のプロパティを含むオブジェクトが格納されます。
注: 通常、このプロパティを使用する必要はありません 。これは、Qt 5 との互換性および Qt Design Studioとの互換性を確保するためにのみ存在します。
© 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.