1
我發現下面的QML組件here:信令組件的用戶是結合的性質是不是安全
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" }
}
]
}
讓我們把它稱爲「MyRect.qml」。由於MyRect覆蓋state
屬性,綁定到屬性將不起作用:
Item {
id: root
MyRect {
id: inner
state: root.state // not safe
}
}
分配但它會工作:
Item {
id: root
onStateChanged: inner.state = root.state // safe
MyRect {
id: inner
}
}
在另一方面兩者結合並分配將是安全的物業width
的MyRect.qml
。
MyRect.qml
的用戶如何知道哪些屬性可以安全地綁定以及哪些不需要檢查源代碼?
你期望什麼?綁定只是單向的,所以當你爲'state'分配一個新的值時,你有兩個相互對立的賦值:外部對象告訴它是''「',內部告訴它是''clicked''。它不能同時存在,所以qml需要做出決定並且取最後一個。 – derM
問題是組件的用戶不知道這個,因爲組件的源代碼是未知的。優選地,QML應該擴展爲具有用於組件創建者發信號的功能。 – uldall