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

how to get Repeater's delegate data in c++?

本文关键字:数据 中继器 获取 C++      更新时间:2023-10-16

在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((; 这里会抛出一个例外,有人可以帮助我吗?

首先是关于你的标题:我不知道你对代表数据的看法是什么,但也许我们仍然会找到一个令人满意的答案。

对于你的错误,我会说,这是意料之中的。让我们将代码分解为更小的部分:

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的方法。

=>nullptr上没有方法childItems()


我不清楚的是,为什么你期望在RepeatercontentItem,因为QObject中没有记录,QQuickItem也没有Repeater中记录。

很可能您将default propertycontentItem混为一谈.默认属性是 QML 自动将您在对象{ }中创建的所有内容分配给该属性的属性,而不将其分配给其他属性。

Item {
id: rootItem
Item { // this will go to the rootItems default property (data)
}
}

接下来的事情是我一开始想知道的:您尝试访问的委托数据是什么?是否要获取组件?然后,您可以读取Repeater的属性delegate

您想获取delegate的实例吗?在这里,我有点迷茫。我认为他们处于Repeaterchildren(),也处于Repeater父母的childItem()中。