首页 > 解决方案 > 如何将不同的变量传递给相同类型的 QML

问题描述

我需要将两个不同的变量传递给相同类型的 QML,但我没有成功。变量是“dataTelemetry.target1Trajectory”和“dataTelemetry.target2Trajectory”。以下代码表示这两个相同组件的实例化。

Components.SimulatorItem {id: componentTarget1; name: "Alvo 1";}
Components.SimulatorItem {id: componentTarget2; name: "Alvo 2";}

在 SimulatorItem 中,我执行了该函数来设置这些不同的变量:我采用了一个名为“trajectory”的局部变量并使其成为有条件的,但我想直接设置“dataTelemetry.target1Trajectory”。我在实例化两个组件的 QML 文件中调用了“setValues”。

  1. SimulatorItem.qml

    function setValues(targetNumber){
    trajectory = trajectoryCombo.currentIndex
    
    if(targetNumber == "Alvo 1"){
        dataTelemetry.target1Trajectory = trajectory
    }
    if(targetNumber == "Alvo 2"){
        dataTelemetry.target2Trajectory = trajectory
    }
    

我需要的是在每个组件 SimulatorItem 中设置这两个变量:“dataTelemetry.target1Trajectory”和“dataTelemetry.target2Trajectory”。

标签: c++qtvariablesqml

解决方案


如果您没有直接控制权dataTelemetry,则可以这样使用Binding参见 qt docs):

Components.SimulatorItem {id: componentTarget1}
Components.SimulatorItem {id: componentTarget2}

Binding {
    target: dataTelemetry
    property: "target1Trajectory"
    value: componentTarget1.trajectory
}    

Binding {
    target: dataTelemetry
    property: "target2Trajectory"
    value: componentTarget2.trajectory
}    

评论后更新

如果你愿意,你也可以去另一个方向:

Components.SimulatorItem {
    id: componentTarget1

    //updated binding
    trajectory: dataTelemetry.target1Trajectory

    //or one-time assignment
    Component.onCompleted: {trajectory = dataTelemetry.target1Trajectory}
}

推荐阅读