这很奇怪,因为我在另一个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) –
我不喜欢你的态度。你需要习惯于你不具备世界上所有的知识,如果有经验的人说你只是打破了束缚,那就意味着你做到了。它可能是世界上最反直觉的错误,但是,是谁设计的呢?也许你不完全理解你使用的机制或语言的目的。 –