是否可以在更新期间自动提升var
/ variant
/ object
/(等)变量的notify-method?
假设我有:
property var objects: {'obj1': 'unnamed', 'obj2': 'unnamed'}
接下来我有绑定,例如text:
Text {
text: objects.obj1
onTextChanged: objects.obj1 = text
}
在onTextChanged
我想提出objects
变量的通知信号,以便在任何地方更新。
答案 0 :(得分:1)
嗯,如果我没弄错的话,QML会为onObjectsChanged
生成一个objects
信号处理程序但是当你在内部更改objects
时它不会被发出,并且由于QML的精彩设计,你不能手动发出objectsChanged()
,它会自动发出,但它不会发出。它仅在将属性重新分配给另一个对象时才会发出。
您无法为JS对象创建信号,因为这需要QObject
派生类来获取信号,从而获取通知和绑定。
您可以通过使用obj1的新值和obj2的旧值重新分配objectsChanged()
属性新对象来强制发出objects
,这将强制第二个文本元素更新并显示新的价值。它不是很优雅,但如果你真的需要使用JS对象,它是一个有效的解决方案。否则,您必须使用QtObject
obj1/2
元素和QML属性
property var objects: {'obj1': 'unnamed', 'obj2': 'unnamed'}
Column {
spacing: 30
TextEdit {
text: objects.obj1
onTextChanged: {
objects = {'obj1': text, 'obj2': objects.obj2}
}
}
Text {
text: objects.obj1
}
}
另一种可能的解决方案是不依赖objects
的通知,并使用代理属性作为控制器。
property var objects: {'obj1': 'unnamed', 'obj2': 'unnamed'}
property string obj1: objects.obj1
onObj1Changed: objects.obj1 = obj1
这样你根本不使用objects
,除了将数据存储到其中之外,请改用obj1
属性,每次更改它都会将更改写入{{ {1}}没有像第一个解决方案那样重新分配整个对象。
但除非你真的需要JS对象,否则我建议废弃它并使用更多QML友好的数据表示。