Поскольку вы используете элемент, который содержит эти 3 прямоугольника в качестве делегата, у вас не будет идентификаторов доступа извне делегата. Идентификаторы преобразуются в реальные объекты во время компиляции, и они не предназначены для ссылки на объекты во время выполнения.
В любом случае, манипулирование делегатами извне - не очень хорошая идея. Передайте необходимые данные вашему делегату и дайте ему самим решить, что делать.
Вы можете назначить внутренние прямоугольники свойству только для чтения chkItem и ссылаться на них позже в своей функции. ,
Item {
readonly property Rectangle _fullSelectedCameraMarker: fullSelectedCameraMarker
readonly property Rectangle _map1SelectedCameraMarker: map1SelectedCameraMarker
readonly property Rectangle _map2SelectedCameraMarker: map2SelectedCameraMarker
Rectangle {
id: fullSelectedCameraMarker
...
visible: cameraButtonBar.checkCaptured(index, false, false)
}
Rectangle {
id: map1SelectedCameraMarker
...
visible: cameraButtonBar.checkCaptured(index, true, false)
}
Rectangle {
id: map2SelectedCameraMarker
...
visible: cameraButtonBar.checkCaptured(index, false, true)
}
}
Вы также можете назвать свой объект с помощью свойства objectName и найти его, перебирая свойство children chkItem
и проверяя прямоугольник по его objectName
Rectangle {
id: fullSelectedCameraMarker
objectName: "fullSelectedCameraMarker"
...
visible: cameraButtonBar.checkCaptured(index, false, false)
}
var chkItem = repeaterId.itemAt(idx);
var chkItemChildren = chkItem.children;
// iterate over children using any machanism you prefer to filter those children
//
for( var i = 0 ; i < chkItemChildren.length ; ++i)
{
if(chkItemChildren[i].objectName==='fullSelectedCameraMarker'){
// whatever you want to do
}
}
Примечание. Вы можете использовать Lodash в QML, что очень поможет.