QML ListView 数据项被覆盖(新手)
QML ListView data items overwritten (newbie)
问题:
- 我错过了什么 -- 显示项目应该在不同的行上?
- 为什么下面的两个 delgate 用法给出不同的结果?
- 我应该读什么来理解这个?
谢谢。
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
Window {
width: 640
height: 480
visible: true
title: qsTr("ListView Overwrite")
ListModel {
id: dataSource_1
ListElement { name: "rock" }
ListElement { name: "paper" }
ListElement { name: "scissors" }
}
Component {
id: delegateItem
Item {
Text { text: name }
}
}
ListView {
model: dataSource_1
//delegate: Text { text: name } // only "rock" displayed
delegate: delegateItem // rock, paper, scissors displayed, overwritten
}
}
可以在 Item.implicitHeight
的文档中找到对您的问题的很好解释:
The default implicit size for most items is 0x0, however some items have an inherent implicit size which cannot be overridden, for example, Image and Text.
您没有为 ListView
指定大小,因此它当前的隐式大小为 0x0。
这意味着 paper/scissors 代理被认为在视图之外,不会被渲染。
要么给 ListView
一个明确的高度,要么简单地指定 anchors.fill: parent
例如。
对于使用基于“组件”的解决方案相互堆叠的代表来说,这也是同样的问题。这里的问题是 Text
包裹在没有指定大小的 Item
周围,因此每个委托都有一个等于 0
的隐式高度。删除 Item
包装器,您的文本将被正确定位,因为 Text
具有固有的 implicitHeight
.
问题:
- 我错过了什么 -- 显示项目应该在不同的行上?
- 为什么下面的两个 delgate 用法给出不同的结果?
- 我应该读什么来理解这个?
谢谢。
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
Window {
width: 640
height: 480
visible: true
title: qsTr("ListView Overwrite")
ListModel {
id: dataSource_1
ListElement { name: "rock" }
ListElement { name: "paper" }
ListElement { name: "scissors" }
}
Component {
id: delegateItem
Item {
Text { text: name }
}
}
ListView {
model: dataSource_1
//delegate: Text { text: name } // only "rock" displayed
delegate: delegateItem // rock, paper, scissors displayed, overwritten
}
}
可以在 Item.implicitHeight
的文档中找到对您的问题的很好解释:
The default implicit size for most items is 0x0, however some items have an inherent implicit size which cannot be overridden, for example, Image and Text.
您没有为 ListView
指定大小,因此它当前的隐式大小为 0x0。
这意味着 paper/scissors 代理被认为在视图之外,不会被渲染。
要么给 ListView
一个明确的高度,要么简单地指定 anchors.fill: parent
例如。
对于使用基于“组件”的解决方案相互堆叠的代表来说,这也是同样的问题。这里的问题是 Text
包裹在没有指定大小的 Item
周围,因此每个委托都有一个等于 0
的隐式高度。删除 Item
包装器,您的文本将被正确定位,因为 Text
具有固有的 implicitHeight
.