嗯,如果我没有记错的话,QML生成onObjectsChanged
信号处理程序objects
,但是当你改变objects
在内部它不能发射,并且由于QML精心的设计,你不能发出objectsChanged()
手动,预计自动发出,除了它不。它只在属性被重新分配给另一个对象时才会发出。
您无法为JS对象创建信号,因为这需要派生类QObject
来获取信号以及通知和绑定。
您可以强制发出objectsChanged()
,方法是重新指定objects
属性的新对象,其中包含obj1的新值和obj2的旧值,这将强制第二个文本元素更新并显示新值。它并不完美,但如果你真的需要使用JS对象,这是一个有效的解决方案。否则,你将不得不使用一个QtObject
元素和QML属性obj1/2
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
属性来代替,并且每次改变时就会写变成objects
不重新分配整个对象作为在第一个解决方案。
但是,除非你真的需要JS对象,我建议你杀它,使用更方便QML数据表示..
你应该有你每次换JS对象的属性值时发出的信号。并确保它永远不会改变。你可能会考虑使用一个访问器函数。否则它将无法工作,您需要'QObject'派生的类来获取信号,因此值更改通知才能工作。 – dtech 2014-12-05 22:47:42
@ddriver我该如何实现? – 2014-12-05 22:52:25