在QML中,如下所示:
Repeater {
objectName: "main_layer_wnd"
id: layer_show_list
anchors.fill: parent
model: delegateLayerModel
delegate: delegateLayerShow
}
Component {
id: delegateLayerShow
LayerItemWndView {
objectName: "delegateLayerShowItem"
}
}
以及如下的c ++代码:
mpMainLayerWnd = mpWnd->findChild<QQuickItem*>("main_layer_wnd");
QQuickItem* content = mpMainLayerWnd->property("contentItem").value<QQuickItem*>();
QList<QQuickItem*> list = content->childItems();
运行以下代码时: content-> childItems(); 这里会抛出异常,有人可以帮助我吗?
答案 0 :(得分:0)
关于标题的第一件事:我不知道您对代表数据的看法,但是也许我们仍然会找到满意的答案。
对于您的错误,我想这是预料之中的。让我们将代码分解为更小的部分:
mpMainLayerWnd = mpWnd->findChild<QQuickItem*>("main_layer_wnd"); // 1
QVariant prop = mpMainLayerWnd->property("contentItem") // 2
QQuickItem* content = prop.value<QQuickItem*>(); // 3
QList<QQuickItem*> list = content->childItems(); // 4
QQuickItem*
contentItem
。您得到一个空的QVariant
。QVariant
的内容转换为QQuickItem*
,这将导致nullptr
nullptr
的方法。 => childItems()
上没有方法nullptr
我不清楚,为什么您希望在contentItem
中包含Repeater
,因为QObject
,QQuickItem
或{{1}中都未记录这样的内容}。
您很有可能将Repeater
与default property
混合在一起。默认属性是QML自动将您在对象contentItem
内创建的所有内容分配给该属性的属性,而不将其分配给其他属性。
{ }
接下来的事情是我一开始想知道的事情:您尝试访问的委托数据是什么?您要获取组件吗?然后,您可以读取Item {
id: rootItem
Item { // this will go to the rootItems default property (data)
}
}
的属性delegate
。
您要获取Repeater
的实例吗?在这里我有点迷路。我认为它们位于delegate
的{{1}}和children()
的父级的Repeater
中。