Индивидуальные идентификаторы Repeater child в QML - PullRequest
0 голосов
/ 16 ноября 2018

Мне было интересно, можно ли назначить отдельные идентификаторы дочернему элементу ретранслятора в QML?

Например, если мой ретранслятор должен был создать 10 прямоугольников, как мне назначить каждому из них уникальныйЯ бы?например, rec1, rec2 и т. д.

Спасибо.

1 Ответ

0 голосов
/ 16 ноября 2018

Как уже было сказано выше id не является обычным свойством и не может быть установлено или изменено во время выполнения. Вы не можете ссылаться на этот атрибут, например, следующий код не будет работать:

console.log(obj.id); 

Ближайшим аналогом id из C ++ является имя переменной:

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;
        }
    }
}
...