开发者问题收集

QML:在 Repeater 上调用 itemAt 返回 null

2016-09-29
3268

我的代码:

840506562

我获取此错误消息:

365374270

i找到 这篇文章 说该解决方案是使用 component.oncomponent.oncompleted 这样(只需插入 component.oncompleted 在文本对象中处理程序):

134985776

,但这会出现相同的错误。

有什么想法吗?

2个回答

rectRepeater 项目在您调用 itemAt(0) 时不会退出。

您应该在实例化 rectRepeater 时调用 itemAt

Window {
    visible: true
    width: 640
    height: 480
    Column {
        Row {
            Repeater {
                id: rectRepeater
                model: 3
                Rectangle {
                    width: 30
                    height: 30
                    color: "red"
                    radius: 10
                }

            }
        }
        Row {
            Repeater {
                id: textrep
                model: 3
                Text {
                    }
            }
        }
        Component.onCompleted: {
            //Here all object are instantiated
            for (var i = 0; i< textrep.count; i++){
                textrep.itemAt(i).text = rectRepeater.itemAt(0).width
            }
        }
    }
}
Konstantin T.
2016-09-29

我会选择条件绑定

Text {
    text: rectRepeater.count > 0 ? rectRepeater.itemAt(0).width : 0;
}

一旦 rectRepeater 实际创建了至少一个委托,就会读取该委托的值。 即使 rectRepeater 的模型在某个时候再次变为空,或者索引 0 处的项目更改了其宽度,这种方法仍然有效

Kevin Krammer
2016-09-30