ListModel 包含委托的数据属性
Posted
技术标签:
【中文标题】ListModel 包含委托的数据属性【英文标题】:ListModel containing data property of delegate 【发布时间】:2019-07-24 08:13:08 【问题描述】:是否可以在 qml 中创建一个 GridView,它的子项在模型中定义,所以我可以为我的 GridView 项目创建一个完整的动态子视图,例如我想在模型中定义 10 个不同的矩形作为我的数据委托。
为此,我想创建一个 GridView 并从模型中设置委托的 data
属性
GridView
model: ListModel
ListElement
childs:Item
// data is a list<Object> , so item here is wrong
//this part is wrong i am looking for correct way of doing this
//error : cannot contain nested elements
Button
Button
delegate: Rectangle
data:childs
这段代码解释了我的问题的逻辑。但它不正确。 我的模型项目将在矩形内,但它的孩子是完全动态的,它可能是 100 个我不知道的项目。 或者问这个问题的另一种方法是“我可以在 ListModel 中有一个组件吗?”更新 所以如果我想使用它,它最终会像这样“让我们说文件名是 MyWidget”:
MyWidget
model:ListModel
//and here we go how can i set data of GridView's delegate
【问题讨论】:
我猜你不只想要 Rectangle,因为那时你可以只将属性封装在 ListModel 中而不是 Rectangle 本身? @Amfasis 将其视为卡片的 GridView,卡片的内容是动态的 好的,我明白了。也许您想尝试这种方法:forum.qt.io/topic/80826/dynamic-delegate-in-repeater/4 @Amfasis 如果我使用加载器,那么我应该为每个孩子定义组件,这不是动态的,正如我从这个解决方案中理解的那样 那么,您的模型来自哪里,由谁填充?如果像在您的示例中一样,它来自 QML,那么我个人认为没有区别,但如果它来自 C++,则情况不同,但在这种情况下,您可以自己创建组件(请参阅forum.qt.io/topic/42087/…) 【参考方案1】:我刚刚偶然发现了QtQml.Models
中定义的ObjectModel
(通过今天发布的另一个*** question)。我进行了一些尝试并提出了这个解决方案,这并不理想,但我认为可以为您提供相当多的东西。
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQml.Models 2.3
Window
visible: true
width: 640
height: 480
title: qsTr("Hello World")
ObjectModel
id: obj_model
Rectangle
width: 10
height: 10
color: "#00ffff"
Rectangle
width: 10
height: 10
color: "#ff00ff"
GridView
anchors.fill: parent
model: grid2.count
delegate: Rectangle
x: 5
y: 5
height: 90
width: 90
color: "red"
GridView
id: grid2
anchors.fill: parent
model: obj_model
之所以有效,是因为GridView
具有相同的cellHeight
和cellWidth
(隐含地,您可以将它们绑定在一起)并且位置相同。
这并不完美,因为 ObjectModel 在 grid2
中停止使用委托(这也是前面提到的 SO 问题的答案)
【讨论】:
这就是我要找的ObjectModel
ty以上是关于ListModel 包含委托的数据属性的主要内容,如果未能解决你的问题,请参考以下文章
类型错误:无法在嵌套列表视图中读取 null 的属性“newdaycalendar”,其中 listmodel 动态创建了 qml
根据 listElement 键切换 listView 的委托