如何在 C++ 中获取中继器的委托数据?
how to get Repeater's delegate data in c++?
在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
- 你找到孩子了。这应该没问题,你会在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
父母的childItem()
中。
相关文章:
- 如何在 C++ 中获取中继器的委托数据?
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 使用C++模板的数据映射器设计模式
- C++将特定的数据模式从RFID阅读器写入文本文件
- 如何在顶点着色器中使用VBO数据作为位置数据,在片段着色器中使用统一数据作为颜色数据
- 如何使用自定义流操纵器在类实例中保存数据
- 如何复制只有两个迭代器的数据?
- GLSL 将颜色数据从片段着色器发送到顶点着色器似乎总是等于 0
- 如何为C++结构自动生成 python 数据解析器
- 将数据从数据阅读器终端实时获取到GUI
- 将数据从数据读取器终端获取到GUI(QtCreator)
- 有没有办法从 C 程序创建数据收集器集
- 中继器内的QML列表视图
- 在C++中创建自定义的类似树的数据结构器
- 尝试使用 CImg 库 (C++) 制作实时数据绘图器
- 数据压缩器需要什么样的数学
- AMP的非矩形数据包装器
- QtQuick2和C++:使用中继器
- QML,如何从c++中动态更改中继器的项
- QList<int> 不能用作中继器的模型