如何将不同的变量传递给相同类型的 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的主要内容,如果未能解决你的问题,请参考以下文章