如何解决QML ListView 数据项被覆盖新手
问题:
谢谢。
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
的文档中找到对您的问题的很好的解释:
大多数项目的默认隐式大小为 0x0,但有些项目具有无法覆盖的固有隐式大小,例如图像和文本。
您没有为 ListView
指定大小,因此它当前的隐含大小为 0x0。
这意味着纸/剪刀代表被视为在视图之外并且不会被渲染。
例如,要么为 ListView
指定一个明确的高度,要么简单地指定 anchors.fill: parent
。
对于使用基于“组件”的解决方案相互堆叠的代表来说,这是同样的问题。这里的问题是 Text
包裹在没有指定大小的 Item
周围,因此每个委托的隐式高度等于 0
。移除 Item
包装器,您的文本将被正确定位,因为 Text
具有固有的 implicitHeight
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。