嗯,如果我沒有記錯的話,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