标签:状态 Qt 更改 37 height width PropertyChanges Quick 属性
1.详细描述
PropertyChanges用于定义State中的属性值或绑定。这使项目的属性值在状态之间发生变化时可以更改。要创建PropertyChanges对象,请指定要修改其属性的目标项,并定义新的属性值或绑定。例如:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
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 { target: rect; color: "blue"; height: container.height }
}
}
}
}
当鼠标被按下时,矩形改变为调整大小的状态。在这种状态下,PropertyChanges对象将矩形的颜色设置为蓝色,高度值设置为container.height。
注意,这会自动将rect.height绑定到容器。高度处于调整大小状态。如果不应该建立属性绑定,高度应该设置为container的值。在状态改变时的高度,将显式属性设置为true。
PropertyChanges对象还可以覆盖对象的默认信号处理程序,以实现特定于新状态的信号处理程序:
PropertyChanges {
target: myMouseArea //鼠标区域的id
onClicked: doSomethingDifferent() //鼠标点击时间处理函数
}
注意:PropertyChanges可以用来更改锚的边距,但不能更改其他锚的值;为此,请使用AnchorChanges。类似地,要更改Item的父值,请使用ParentChange。
2.在转换中立即更改属性
当使用Transitions来动画状态变化时,它们将属性从当前状态中的值动画到新状态中定义的值(由PropertyChanges对象定义)。然而,有时需要在过渡期间立即设置属性值,而不需要动画;在这些情况下,PropertyAction类型可用于强制立即更改属性。
有关更多细节,需要查阅PropertyAction。
注意:Item的可见和启用属性的行为与PropertyChanges中的其他属性不完全相同。由于这些属性可以通过其父属性的状态隐式更改,因此应该在所有PropertyChanges中显式设置它们。如果父项目不启用或不可见,则子项目仍然不启用/不可见。
请参见状态示例,Qt Quick States和Qt QML。
3.PropertyChanges的数据成员
3.1 explicit : bool
如果explicit设置为true,则任何潜在的绑定都将被解释为在进入状态时发生的一次性赋值。
在下面的示例中,添加explicit会阻止myItem.width绑定到父结点。相反,它在状态变化时会被赋值为:parent.width。
PropertyChanges {
target: myItem
explicit: true
width: parent.width
}
默认情况下,explicit为false。
3.2 restoreEntryValues : bool
此属性用于保留在离开状态时是否应该恢复以前的值。
默认值为true。将此值设置为false将创建一个临时状态,该状态对属性值具有永久影响。
3.3 target : Object
此属性表示要更改属性的对象。
标签:状态,Qt,更改,37,height,width,PropertyChanges,Quick,属性 来源: https://blog.csdn.net/jolin678/article/details/120596975
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。