我有两个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)