如何在 C++ 中获取中继器的委托数据?
Posted
技术标签:
【中文标题】如何在 C++ 中获取中继器的委托数据?【英文标题】:how to get Repeater's delegate data in c++? 【发布时间】:2018-10-25 13:31:23 【问题描述】:在 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();
运行此代码时: 内容->childItems(); 这里会抛出异常,有人可以帮帮我吗?
【问题讨论】:
【参考方案1】:首先关于您的标题:我不知道您认为委托数据是什么,但也许我们仍然会找到令人满意的答案。
对于您的错误,我想说,这是意料之中的。让我们将您的代码分解成更小的部分:
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
-
你找到了孩子。这应该没问题,您将在 mpMainLayerWnd 中有一个
QQuickItem*
您尝试读取不存在的属性contentItem
。你得到一个空的QVariant
。
您尝试将空的QVariant
的内容转换为QQuickItem*
,这将导致nullptr
您尝试访问nullptr
的方法。
=> nullptr
上没有方法 childItems()
我不清楚的是,为什么您希望在 Repeater
中有 contentItem
,因为在 QObject
、QQuickItem
和 Repeater
中都没有记录。
您很可能会将default property
与contentItem
混淆。默认属性是 QML 自动将您在对象的
中创建的所有内容分配给该属性,而不会将其分配给其他属性。
Item
id: rootItem
Item // this will go to the rootItems default property (data)
接下来是我一开始想知道的:您尝试访问的委托数据是什么?你想得到组件吗?然后就可以读取Repeater
的属性delegate
了。
您想获取delegate
的实例吗?在这里我有点迷路了。我认为它们在Repeater
的children()
和Repeater
s 父级的childItem()
中。
【讨论】:
谢谢。我想获取委托的实例,它们在中继器父级的 childItem() 中。以上是关于如何在 C++ 中获取中继器的委托数据?的主要内容,如果未能解决你的问题,请参考以下文章