這很奇怪,因爲我在另一個QML文件中使用了幾乎相同的模式,並且它能夠正常工作!我相信我不會在任何地方重新分配價值(我知道的唯一可以讓屬性變爲靜態的東西)! 我有這樣的事情(這是一個簡單的例子,可能按預期工作):在我爲什麼Qt QML沒有正確綁定屬性?
Item {
property bool isExpanded: false
MouseArea {
anchors.fill: parent
onClicked: {
isExpanded = !isExpanded
console.log(isExpanded)
console.log(myId.visible)
}
}
MyCustomItem {
id: myId
visible: isExpanded
// other stuff
}
}
IsExpanded
更改,請單擊但Item
知名度始終保持不變!而且我還有很多其他屬性(例如height: isExpanded ? someval : 0
),這些屬性也不會改變!如果我總是手動更改所有內容,那麼它的作品有點類似,但那又有什麼意義?而在另一個QML中,我使用了一個類似的模式,它在那裏工作!
但是!如果我把,例如onDoubleClicked
/另一個按鈕按: myId.visible = Qt.binding(function() {return isExpanded})
它的工作原理,因爲它應該!所以,由於某些未知的原因,當它應該在常規財產聲明(visible: isExpanded
)中時,它不會「綁定」它們。
所以問題是,我是否真的需要明確告訴Qt綁定屬性使其工作?
編輯:爲了說清楚:我確定我不會在任何地方重新指定可見的屬性。我確認了它。儘管qml大小隻有大約100行,但我使用ctrl + f來查找任何提及的可見內容,除了已經提到的內容外,沒有發現任何內容。 如果有更可靠的方法來說明什麼來自/檢查某處或某些地方可能的重新分配,請告訴。
確實「其他的東西」或任何其他分配給myId.visible並打破綁定?這是我能想到的唯一的事情。或MyCustomItem聲明它自己的可見屬性,並且impl包含一個錯誤。 –
不,它沒有。如果有什麼會破壞綁定不會也打破「硬編碼」綁定太myId.visible = Qt.binding(function(){return isExpanded})? MyCustomItem只是其中包含其他內容的Item {}。它本身並不使用可見屬性。唯一我「可能」重新分配的是item id(它在qml文件中有它自己的內部id,但是因爲我的問題qml中有兩個 - 它們分配了不同的id) –
我不喜歡你的態度。你需要習慣於你不具備世界上所有的知識,如果有經驗的人說你只是打破了束縛,那就意味着你做到了。它可能是世界上最反直覺的錯誤,但是,是誰設計的呢?也許你不完全理解你使用的機制或語言的目的。 –