Мне было интересно, можно ли назначить индивидуальные идентификаторы дочернему элементу репитера в QML?
Например, если мой репитер должен был создать 10 прямоугольников, как мне назначить каждому из них уникальный идентификатор? например rec1, rec2 и т. д.
Зачем нужны индивидуальные id?, Мне кажется, у вас есть Проблема XY
Дайте повторителю идентификатор и используйте .itemAt(index) для ссылки на отдельные объекты. Кроме того, я не могу догадаться, чего вы пытаетесь достичь. Я согласен с @eyllanesc в том, что у вас проблема с XY. Возможно, опишите вашу основную цель + предоставьте код / примеры? Также не забудьте проверить SO тур и как задать хороший вопрос.





Как уже было сказано выше, я бы не является обычным свойством и не может быть установлено или изменено во время выполнения. Вы не можете ссылаться на этот атрибут, например, следующий код не будет работать:
console.info(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;
}
}
}
Просто добавьте это свойство к любому объекту QML, которому требуется уникальный идентификатор:
readonly property string uniqueId: `${this}`.substring(`${this}`.indexOf("(0x") + 2).replace(")", "")
нет, это невозможно