qt - 如何使 QML ListView Width 成为其委托的宽度?
问题描述
我创建了一个用户可以滚动浏览的 ListView。我注意到滚动条没有出现,滚动也不起作用。
我将问题归结为我将 ListView 宽度分配为 contentWidth。例如,如果我将其设置为 100,则会出现滚动条并且我可以滚动。但是,我希望 ListView 的宽度由它的内容决定(这就是我使用 contentWidth 的原因)。我做错了吗,我发现的有关此事的所有其他主题都说 contentWidth 应该工作......
import QtQuick 2.12
import QtQuick.Window 2.12
import QtGraphicalEffects 1.0
import QtQuick.Controls 2.15
Window {
id: root
width: 1200
height: 800
visible: true
title: qsTr("Server Manager")
color: "black"
ListView {
spacing: 10
height: 100
width: contentWidth
ScrollBar.vertical: ScrollBar {
active: true
}
model: ["test", "6", "123", "22", "55"]
delegate: Row {
width: contentWidth
TextField {
width: 150
height: 80
text: "Sample"
}
TextField {
width: 150
height: 80
text: "Sample2"
}
TextField {
width: 150
height: 80
text: "Sample3"
}
}
}
}
解决方案
几点评论:
在 ListView(它是 Flickable 的子类型)上,您必须手动设置 contentWidth。默认为 -1 表示尚未设置。(虽然它出现在这种情况下 contentWidth 如果未设置将使用宽度。)
使用这种布局和您指定的高度,您需要为 ListView 打开剪辑。它通常是关闭的,因为它们经常用于完整的窗口布局。你需要在这里让它看起来有 100 高。
基于三个 TextField 子项,每一行都有自己的隐式宽度。在它上面设置宽度只会干扰它。
如果您希望 ListView 匹配它的内容宽度,那么您必须进入它的 contentItem(委托行实际附加的位置),然后您可以使用其 childrenRect 的宽度。
更新代码:
import QtQuick 2.12
import QtQuick.Window 2.12
import QtGraphicalEffects 1.0
import QtQuick.Controls 2.15
Window {
id: root
width: 1200
height: 800
visible: true
title: qsTr("Server Manager")
color: "black"
ListView {
spacing: 10
height: 100
width: contentItem.childrenRect.width
clip: true
ScrollBar.vertical: ScrollBar {
active: true
}
model: ["test", "6", "123", "22", "55"]
delegate: Row {
TextField {
width: 150
height: 80
text: "Sample"
}
TextField {
width: 150
height: 80
text: "Sample2"
}
TextField {
width: 150
height: 80
text: "Sample3"
}
}
}
}
推荐阅读
- php - 将数据插入到具有 2 个不同表的一个表中
- c# - 在 UWP 中 JSON 反序列化后计算的 Sharepoint 值返回 Null
- javascript - postgresql 查询以随机顺序返回
- lua - Windows 上的 Luarocks 无法识别我的 lua_libdir
- autohotkey - Autohotkey 仅以特定语言进行更改
- git - 无法将文件推送到 git,原因是:未能推送一些 refs
- numpy - numpy:将大 float32 转换为 int32 时结果错误
- php - Laravel 有很多保存
- html - 延迟特定的变换属性 CSS
- r - 为什么替换将 noquote 文本更改为 R 中的字符串?