我尝试使用 Repeater
将单元格添加到我的 GridLayout
. 我的数据存储在模型中,每个元素包含两个属性:
-
Title
-
Value
我的目标是在第一个单元格中包含 Title
,在每行的第二个单元格中包含 Value
.
GridLayout {
id: someId
columns: 2
rowSpacing: 5
columnSpacing: 5
anchors.margins: 5
anchors.left: parent.left
anchors.right: parent.right
Repeater {
model: myModel
Label {
text: modelData.title
}
TextArea {
text: modelData.value
}
}
}
但是QML Repeater
只允许一个元素 . 任何想法我怎么能得到我想要的布局?
+------------+---------------------------------------+
| | |
| title0 | value0 |
| | |
| | |
+------------+---------------------------------------+
| | |
| | |
| title1 | value1 |
| | |
| | |
+------------+---------------------------------------+
| | |
| title2 | value2 |
| | |
| | |
+------------+---------------------------------------+
3 回答
您可以在
GridLayout
中简单地使用两个Repeater
,如下所示:index
参数可自由使用并存储模型的当前行 .通过使用
Layout.fillWidth
附加属性,您可以控制单列的width
.当然,属于列的每个单元格与该列的所有其他单元格具有相同的大小,这与使用两个
Column
组件时发生的情况不同 .这个解决方案有一些缺点,但如果你的目的主要是从模型打印普通数据,这是很好的 .
模型 - 视图原则假定每个模型节点由不同的委托组件对象显示 . 所以我建议你听听@ BaCaRoZzo的评论并用
Column
代替GridLayout
. 当然,QML非常灵活,您可以这样做:但在实际项目中使用它太奇怪了 .
您可以使用GridLayout.flow指定应填充单元格的顺序,即row-(
GridLayout.LeftToRight
)或逐列(GridLayout.TopToBottom
) . 请注意,使用GridLayout.TopToBottom
时应指定number of rows .使用此解决方案,skypjack的(简化)示例将变为: