QML

时间:2018-11-16 00:08:46

标签: qt qml repeater id

我想知道是否可以在QML中为转发器的子代分配单独的ID?

例如,如果我的中继器要创建10个矩形,如何为每个矩形分配唯一的ID?例如rec1,rec2等

谢谢。

2 个答案:

答案 0 :(得分:2)

如上所述,id不是常规属性,不能在运行时设置或更改。您无法引用此属性,例如以下代码将不起作用:

console.log(obj.id); 

与C ++最接近的id类似物是变量名:

auto id = new Object();

当您可以引用名称但不能设置或更改名称时。

对于此问题,您可以使用objectName或使用某些指定的访问功能来引用项目,例如:

Row {
    id:row
    anchors.centerIn: parent
    spacing: 5
    Repeater {
        id: container
        model: 10
        Text {
            text:"item" + index
            objectName: "item" + index
        }
        Component.onCompleted: {
            container.itemAt(5).text = "changed1";
            findChild(row, "item6").text = "changed2";
        }

        function findChild(obj, name) {
            for(var i = 0;i < obj.children.length;i ++){
                if(obj.children[i].objectName === name)
                    return obj.children[i];
            }
            return undefined;
        }
    }
}

答案 1 :(得分:0)

只需将此属性添加到任何需要唯一ID的QML对象中即可:

readonly property string uniqueId: `${this}`.substring(`${this}`.indexOf("(0x") + 2).replace(")", "")