如何通过字符串ID查找QML项目?

Wer*_*lik 8 qt dynamic qml qtquick2

我有一个id我需要在QML树中找到的对象字符串.例如:

var idToFind = "myBtnId"
Run Code Online (Sandbox Code Playgroud)

我可以做以下的事情吗?

var objectThatINeed = myMainWindow.findObjectById(idToFind)
Run Code Online (Sandbox Code Playgroud)

据我所知,我可以objectName用于此目的(至少从C++开始).我可以在id不引入名称的情况下以某种方式重用现有的吗?

我想将此对象用作其他动态创建的控件的父对象.

Mit*_*tch 7

不,你必须使用objectName或其他一些财产.

id属性:

创建对象实例后,无法更改其id属性的值.虽然它看起来像普通的属性,但id属性不是普通的属性属性,并且特殊的语义适用于它; 例如,在上面的示例中无法访问myTextInput.id.


Phr*_*ogz 5

如果您事先知道所需的所有项目的 ID,则可以为它们创建一个对象映射并使用它来查找它们。例如:

Item {
    property var idMap: ({ foo:foo, bar:bar })
    Rectangle { id:foo }
    Item { id:bar }

    function findItemById(id) {
      return idMap[id];
    }

    Component.onCompleted: console.log(findItemById('foo'), findItemById('bar'))
    // qml: QQuickRectangle(0x1479e40) QQuickItem(0x148fbf0)
}
Run Code Online (Sandbox Code Playgroud)