Qt 通过函数调用id
我试图根据一些输入从一系列矩形调用id。例如,假设有一个名为“input”的变量发生变化。我想根据“input”变量(即如果input==2;output==r2.color)从相应的矩形中调用“color”字段。这是我尝试过的,但不起作用:Qt 通过函数调用id,qt,qml,Qt,Qml,我试图根据一些输入从一系列矩形调用id。例如,假设有一个名为“input”的变量发生变化。我想根据“input”变量(即如果input==2;output==r2.color)从相应的矩形中调用“color”字段。这是我尝试过的,但不起作用: Item { id: main property var input: 2 property var output: main["r" + input].color Rectangle { id: r1
Item {
id: main
property var input: 2
property var output: main["r" + input].color
Rectangle {
id: r1
color: ""
}
Rectangle {
id: r2
color: ""
}
Rectangle {
id: r3
color: ""
}
}
您可以声明控件数组,然后通过索引访问它们(及其属性) 也许这就是你的解决方案
import QtQuick 2.12
Item {
id: main
property var input: 2
property var controls: [r1, r2, r3]
property var output: controls[input].color
Rectangle {
id: r1
color: "red"
}
Rectangle {
id: r2
color: "green"
}
Rectangle {
id: r3
color: "blue"
}
}
备选答案。在不能(或不应该)创建控件数组的情况下,它可能很有用。所以,您永远不会忘记向数组中添加一些控件,但它的工作速度会变慢,因为每次调用
findItemById
时,它都会迭代比较objectName
的所有控件。此外,还应记住将objectName
添加到控件中,您将要找到这些控件
因此,您可以通过objectName
s项进行搜索。下面是一个例子:
import QtQuick 2.12
Item {
id: main
property var input: 2
property var output: findItemById("r" + input).color
function findItemById(objName) {
for(var i = 0; i < main.children.length; i++)
if (main.children[i].objectName === objName)
return main.children[i];
}
Rectangle {
objectName: "r1"
color: "red"
}
Rectangle {
objectName: "r2"
color: "green"
}
Rectangle {
objectName: "r3"
color: "blue"
}
}
导入QtQuick 2.12
项目{
id:main
属性变量输入:2
属性变量输出:findItemById(“r”+输入).color
函数findItemById(objName){
for(var i=0;i
这是有效的JavaScript吗?请注意,您可以使用内置属性而不是控件
。是的,这是正确的,但当您有许多控件或交换它们时,更容易丢失有效索引。或者,当他们有某种等级制度时,这似乎是一条路要走。谢谢