如何在QML中实现一个带有详细信息的ListView
我想做一个细致的ListView(列表视图),而不是使用一个只有轮廓的扁平元素。我希望每个元素都包含大量细节,例如渐变、附加在这些元素上的额外矩形以增添光泽效果,但要么是我的知识不足,要么ListView无法做到这一点。如果真是这样,是否有办法让列能够通过箭头键滚动,并让元素切换到已选中的变体?
我想创建的菜单示意图:

这是按我的详细设计创建单个元素的方式:渐变配色方案和附加线在被选中时会改变颜色,同时文本也会切换为粗体。请多多包涵,因为我是新手程序员。
Rectangle {
id: selection1
width: 240
height: 29
gradient: Gradient {
GradientStop {
position: 0
color: "#d9d9d9"
}
GradientStop {
position: 1
color: "#c2c2c2"
}
orientation: Gradient.Vertical
}
Rectangle {
id: rectangle7
x: 0
y: 27
width: 240
height: 1
color: "#708c8c8c"
}
Text {
id: text3
x: 8
y: 5
width: 164
height: 19
color: "#000000"
text: "Selection 1"
font.pixelSize: 13
styleColor: "#000000"
smooth: false
renderType: Text.QtRendering
font.weight: Font.Normal
font.styleName: "SemiBold"
font.family: "Open Sans"
font.bold: false
DesignEffect {
effects: [
DesignDropShadow {
offsetY: -1
blur: 0
}]
}
}
}
解决方案
这正是 delegate 属性的用途。你为列表中每个项分配你想要使用的组件。你可以在代理中放置渐变,或放你想要的任何东西。为从列表模型中提取的任意数据添加所需的属性。文档中有一个简单的示例。文档
ListView {
...
delegate: Rectangle {
id: listItem
// Add required properties that comes from the model
required string label
gradient: Gradient {
GradientStop {
position: 0
color: "#d9d9d9"
}
GradientStop {
position: 1
color: "#c2c2c2"
}
orientation: Gradient.Vertical
}
Text {
text: listItem.label
}
}
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。