Edit2:接受的答案演示了警告如何避免造成太大的問題。我已經改變了這個問題的主題,以更好地反映實際上在那裏回答的問題。它沒有解決在Edit1中提到的Binding問題,但是由於警告不再擔心我使用Binding的主要原因不再相關。在JavaScript中動態創建的QML對象的綁定屬性時發出警告
編輯:根據Praveen Kumar的建議,我創建了一個MVCE來說明問題。但是,代碼現在似乎按預期工作!但是,因爲所使用的方法在文檔中有明確的警告,所以我已經爲解決方案必須涉及綁定QML類型的問題添加了條件,這仍然是我不瞭解如何執行的操作。
修改了原始問題:我有一些在QML中動態創建的對象,我想將這些對象的一些屬性綁定到靜態對象的屬性上。
我已經使用ListModel來管理動態創建的對象,建議爲here。
使用此ListModel我沒有問題循環所有對象並訪問它們。
相同的網站建議使用the Binding component的綁定屬性,但我不明白如何使用它。
我能夠使這項工作不的綁定類型如下面的代碼演示:
main.qml
import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 2.1
Window {
visible: true
width: 640
height: 480
ListModel
{
id: listModel
}
Column
{
id: mainCol
anchors.centerIn: parent
spacing: 10
Button
{
text: "Click to create object"
onClicked:
{
var component = Qt.createComponent("Box.qml");
var obj = component.createObject(mainCol);
listModel.append({"obj": obj})
}
}
TextField
{
id: inputTxt
}
Button
{
text: "Click to bind properties"
onClicked:
{
for (var i = 0; i < listModel.count; ++i)
{
var dynObj = listModel.get(i).obj;
dynObj.boxTxt = Qt.binding(function() {return inputTxt.text});
}
}
}
}
}
Box.qml
import QtQuick 2.0
Rectangle
{
property alias boxTxt: txt.text
width: 100
height: 100
color: "lightblue"
Text
{
id: txt
text: "Dynamic object"
}
}
這正是我想要的,但文檔塔季翁有大約ListModel.get(此警告):
警告:返回的對象不保證仍然有效。它不應該用於屬性綁定。
這就是我正在做的。
我不能用綁定包裹我的頭。我不需要爲每個Box組件動態創建一個新的Binding組件嗎?這難道不會讓我走得更遠嗎?
如果綁定不是這樣做的,那也是一個有趣的答案!
(另外,如果編輯的問題,這種方式是不是在這裏做事情的方式,請讓我知道在評論)
你能提供[MVCE](https://stackoverflow.com/help/mcve)嗎? –
@PraveenKumar謝謝!我創建了一個MVCE,代碼以intendend的形式工作。工作中的代碼中必須有其他內容。然而,我使用的方法我認爲不夠健壯,所以我相應地改變了這個問題。 –
如果下面提到的描述回答了您的問題/疑問,請接受答案,以便其他人可以在將來參考。它非常好描述。 –