QML var属性是通过引用传递还是通过复制传递

  • 本文关键字:复制 var 属性 QML 引用 qt qml
  • 更新时间 :
  • 英文 :


我有两个QML文件,如下所示:

//Page.qml
SelectionPage {
model: localizationPageProxy.vehicleTypes //QObject* class exposed by property
currentKey: localizationPageProxy.vehicleTypes.currentDataKey //QVariant property
}

//SelectionPage.qml
Item {
property var model
property var currentKey
id: page
ColumnLayout {
height: parent.height
width: parent.width * 0.9
anchors.horizontalCenter: parent.horizontalCenter
ListView {
id: listView
anchors.fill: parent
ScrollBar.vertical: ScrollBar {}
clip: true
model: page.model.data
spacing: Number.EPSILON // I don't know why the data loading is faster with that
delegate: Item {
height: listView.height * 0.12
width: listView.width
RadioButtonItem {
height: parent.height * 0.85
width: parent.width
anchors.centerIn: parent
text: modelData.value
checked: modelData.key === page.currentKey
onClicked: page.currentKey = modelData.key //here the c++ property is changed
}
}
}
}
}

那么,SelectionPage.qml的currentKey属性是通过引用传递的吗
如果那是一个副本,我不应该看到c++模型的更改
感谢您的帮助

与其讨论复制与引用,不如讨论绑定。当你这样做时:

currentKey: localizationPageProxy.vehicleTypes.currentDataKey

您正在创建绑定。每当currentDataKey的值发生变化时,currentKey也会被更新。但这并不是双向约束。因此,更改currentKey不会更新currentDataKey。双向绑定很难实现,但SO上有关于它们的帖子。

为了真正解决您想要实现的目标,我建议在您的QObject中添加一个名为updateCurrentKey之类的Q_INVOKABLE函数。然后在你的onClicked处理程序中,做这样的事情:

onClicked: page.model.updateCurrentKey(modelData.key)

最新更新