如何将不同的变量传递给相同类型的 QML

Posted

技术标签:

【中文标题】如何将不同的变量传递给相同类型的 QML【英文标题】:How to pass different variables to same type of QML 【发布时间】:2020-06-10 13:12:20 【问题描述】:

我需要将两个不同的变量传递给相同类型的 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”。

    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”。

【问题讨论】:

请澄清“传递变量”是什么意思,你使用什么代码,你得到什么错误? 我对文字做了一些调整,是不是更清楚了? 请提供minimal reproducible example,无需文字解释代码。 对不起,我是这里的初学者,我的英语不是很好。我将重写问题以使其更清楚。 【参考方案1】:

如果您无法直接控制dataTelemetry,您可以使用Binding (see 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

【讨论】:

它可以工作,但是这些屏幕是应用程序之一,在我关闭所有 qml 值后都设置为默认值。有什么东西可以让 QML 从 dataTelemetry.target1 中包含的值开始吗? 我不确定你现在想要什么,所以提供了两个选项,不确定在使用第一个选项时是否会出现“绑定循环错误”

以上是关于如何将不同的变量传递给相同类型的 QML的主要内容,如果未能解决你的问题,请参考以下文章

如何加载相同的 QML 文件并传递不同的属性

如何将变量结构类型传递给 C 中的函数

如何将变量传递给 const char 类型?

如果自定义类型从 C++ 作为 const 传递,如何使用 QML 注册自定义类型

C# 动态转换超过了不同参数的类型不匹配错误

将对象类型变量传递给另一个类但保持结构?