PropertyChanges QML 类型

描述了新状态的新属性绑定或值。 更多...

导入语句import QtQuick

属性

详细描述

PropertyChanges 用于在 状态 中定义属性值或绑定。这样可以在项目在不同状态之间变化时改变其属性值。

要创建一个 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

注意,这将在 resized 状态下自动将 rect.height 绑定到 container.height。如果应该不建立属性绑定,并且高度应该是状态变化时 container.height 的值,请将 explicit 属性设置为 true

PropertyChanges 对象还可以重写对象的默认信号处理器以实现特定于新状态的信号处理器

PropertyChanges {
    myMouseArea.onClicked: doSomethingDifferent()
}

注意: PropertyChanges 可以用来改变锚点边距,但不能改变其他锚点值;请改用 AnchorChanges。类似地,要改变 Itemparent 值,请使用 ParentChange

重置属性值

可以使用 undefined 值来重置状态中属性值。在下面的示例中,当 myText 变为 widerText 状态时,其 width 属性被重置,使文本具有自然宽度,并在单行上显示整个字符串。

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中的其他属性不同,visibleenabled属性的行为并不完全相同。因为这些属性可以通过他们的父状态的隐式更改而改变,所以在所有PropertyChanges中应该明确设置。如果一个部件的父部件不可用或不可见,该部件仍然将处于不可访问/不可见状态。

注意:为了与Qt 5保持向后兼容性,您还可以使用target属性和不含ID的普通属性名称指定属性更改。例如:PropertyChanges { target: myItem; x: 15 }。建议使用带有ID的格式。如果您需要使用带有target的格式,如果文件将与Qt设计工作室编辑。请注意,Qt设计工作室对其可以处理的文件也施加了多项进一步的限制。

另请查看:状态示例Qt Quick StatesQt 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设计工作室兼容。


© 2024 The Qt Company Ltd. 本文档中包含的贡献版权属于各自的拥有者。本提供的文档是根据由自由软件基金会发布的GNU自由文档许可证版本1.3的条款许可的。Qt和相关的标志是The Qt Company Ltd.在芬兰和其他国家/地区的商标。所有其他商标均为各自所有者的财产。