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

Are QML var properties passed by reference or by copy?

我有两个 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 也会更新。但它不是 two-way 绑定。所以改变 currentKey 不会更新 currentDataKey。 Two-way 绑定很难实现,但是 SO 上有关于它们的帖子。

为了真正解决您想要实现的目标,我建议向您的 QObject 添加一个名为 updateCurrentKey 或其他名称的 Q_INVOKABLE 函数。然后在您的 onClicked 处理程序中,执行如下操作:

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