如何在C ++中获取Repeater的委托数据?

时间:2018-10-25 13:31:23

标签: c++ qt qml repeater

在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(); 这里会抛出异常,有人可以帮助我吗?

1 个答案:

答案 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
  1. 找到孩子。没关系,并且mpMainLayerWnd中将有一个QQuickItem*
  2. 您尝试读取不存在的属性contentItem。您得到一个空的QVariant
  3. 您尝试将空QVariant的内容转换为QQuickItem*,这将导致nullptr
  4. 您尝试访问nullptr的方法。

=> childItems()上没有方法nullptr


我不清楚,为什么您希望在contentItem中包含Repeater,因为QObjectQQuickItem或{{1}中都未记录这样的内容}。

您很有可能将Repeaterdefault property混合在一起。默认属性是QML自动将您在对象contentItem内创建的所有内容分配给该属性的属性,而不将其分配给其他属性。

{ }

接下来的事情是我一开始想知道的事情:您尝试访问的委托数据是什么?您要获取组件吗?然后,您可以读取Item { id: rootItem Item { // this will go to the rootItems default property (data) } } 的属性delegate

您要获取Repeater的实例吗?在这里我有点迷路。我认为它们位于delegate的{​​{1}}和children()的父级的Repeater中。