QT - QML 狀態(tài)(State)
詳細(xì)說明
狀態(tài)是一組基于默認(rèn)配置的批量改變。
所有組件均具有默認(rèn)狀態(tài)湖员,該狀態(tài)定義對象和屬性值的默認(rèn)配置。可以通過向States屬性添加State組件來定義新狀態(tài)拇颅,以允許組件在不同配置之間切換。例如乔询,這些配置可用于應(yīng)用不同的屬性值集或執(zhí)行不同的腳本樟插。
以下示例顯示一個(gè)Rectangle。在默認(rèn)狀態(tài)下,矩形被涂成黑色黄锤。在“單擊”狀態(tài)下搪缨,PropertyChanges對象將矩形的顏色更改為紅色。在MouseArea中單擊可在默認(rèn)狀態(tài)和“單擊”狀態(tài)之間切換矩形的狀態(tài)鸵熟,從而在黑色和紅色之間切換矩形顏色副编。
import QtQuick 2.0
Rectangle {
id: myRect
width: 100; height: 100
color: "black"
MouseArea {
id: mouseArea
anchors.fill: parent
onClicked: myRect.state == 'clicked' ? myRect.state = "" : myRect.state = 'clicked';
}
states: [
State {
name: "clicked"
PropertyChanges {
target: myRect;
color: "red"
}
}
]
}
請注意,默認(rèn)狀態(tài)是使用空字符串(“”)引用的流强。
狀態(tài)通常與轉(zhuǎn)場動(dòng)畫一起使用痹届,以在狀態(tài)發(fā)生變化時(shí)提供動(dòng)畫。
注意:不允許從同一對象的另一個(gè)狀態(tài)內(nèi)設(shè)置對象的狀態(tài)打月。
**另請參見“狀態(tài)” 示例队腐,“ Qt快速狀態(tài)”,“ 過渡 ”和“ Qt QML”奏篙。
屬性
- [default]changes : list<Change>
此屬性保存適用于此狀態(tài)的更改
默認(rèn)情況下柴淘,這些更改將應(yīng)用??于默認(rèn)狀態(tài)。如果狀態(tài)擴(kuò)展了另一個(gè)狀態(tài)秘通,則將針對擴(kuò)展?fàn)顟B(tài)應(yīng)用更改悠就。 - extend : string
此屬性保留此狀態(tài)擴(kuò)展的狀態(tài)。
當(dāng)一個(gè)狀態(tài)擴(kuò)展到另一個(gè)狀態(tài)時(shí)充易,它將繼承該狀態(tài)的所有更改梗脾。
關(guān)于擴(kuò)展?fàn)顟B(tài)所指定的更改,被擴(kuò)展的狀態(tài)被視為基本狀態(tài)盹靴。 - name : string
此屬性保存狀態(tài)的名稱炸茧。
每個(gè)狀態(tài)在其項(xiàng)目內(nèi)應(yīng)具有唯一的名稱。 - when : bool
該屬性在應(yīng)用狀態(tài)成立時(shí)生效稿静。
應(yīng)該將其設(shè)置為一個(gè)表達(dá)式梭冠,您希望何時(shí)應(yīng)用狀態(tài)時(shí)使該表達(dá)式的計(jì)算結(jié)果為true
。例如改备,當(dāng)按下MouseArea時(shí)控漠,以下Rectangle更改為進(jìn)入和退出“隱藏”狀態(tài):
Rectangle {
id: myRect width: 100; height: 100 color: "red"
MouseArea {
id: mouseArea;
anchors.fill: parent
}
states: State {
name: "hidden";
when: mouseArea.pressed
PropertyChanges {
target: myRect;
opacity: 0
}
}
}
如果組中的多個(gè)狀態(tài)具有when同時(shí)求值的子句,true則將應(yīng)用第一個(gè)匹配狀態(tài)悬钳。例如盐捷,在以下代碼段中,state1將始終選擇該代碼段默勾,而不是state2在sharedCondition變?yōu)闀r(shí)true碉渡。
Item {
states: [
State {
name: "state1";
when: sharedCondition
},
State {
name: "state2";
when: sharedCondition
}
]
// ...
}