首页 > 解决方案 > 有没有办法在 qml 中以字符串格式获取其 id 的组件?

问题描述

在 javascript 的 qml 中的一个函数中,我有一个组件的 id。这是我正在尝试做的一个简单示例:

function teste(val) {
    var elem = "objectId"
    var objectThatINeed = submenu1.findObjectById(elem)
    objectThatINeed.someValueIWantToChange = val
}

该功能findObjectById不存在,它只是为了说明我想要做什么。

我想获得对该对象的引用(不,我不想直接访问它objectId.someValueIWantToChange = val),然后更改属性。

如果id不可接受,我看到可以使用的另一个属性是 objectName,甚至是自定义属性......

怎么能做这样的事情?

标签: qtqml

解决方案


在 QML 中,id 并不是一个真正的属性,并且很难检索它(它更像是一个变量名)。但是你可以使用属性比如objectName从特定的父母那里找到一个孩子:

Item {
        id: theParent
        Item {
            objectName: "id1"
        }
        Item {
            objectName: "id2"
        }
        Item {
            objectName: "id3"
        }
    }

    function findChild(id, root) {
        for (var i = 0; i !== root.children.length; ++i) {
            const child = root.children[i];
            if (child.objectName === id) {
                console.log("Found");
                return child;
            }
        }
                return null;
    }

推荐阅读