Qt 通过函数调用id

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

我试图根据一些输入从一系列矩形调用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
    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吗?请注意,您可以使用内置属性而不是
控件
。是的,这是正确的,但当您有许多控件或交换它们时,更容易丢失有效索引。或者,当他们有某种等级制度时,这似乎是一条路要走。谢谢