我在这里做错了什么。使用我的自定义委托(delegate),我的项目在我的 ListView 中相互重叠。这是我得到的...
这就是我想要做的......
QML
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
Frame {
ListView {
implicitWidth: 250
implicitHeight: 250
clip: true
model: ListModel {
ListElement {
done: true
description: "Wash the car this could be a really long message with some multiline support\n we will see how it works."
}
ListElement {
done: false
description: "Fix the car"
}
ListElement {
done: false
description: "Sell the car"
}
ListElement {
done: true
description: "Wash the car"
}
ListElement {
done: false
description: "Fix the car"
}
ListElement {
done: false
description: "Sell the car"
}
ListElement {
done: true
description: "Wash the car"
}
ListElement {
done: false
description: "Fix the car"
}
ListElement {
done: false
description: "Sell the car"
}
}
delegate: Row {
spacing: 6
width: parent.width
Rectangle {
id: newsicon
width: 16
height: 16
color: "steelblue"
}
Column {
Rectangle {
color: "lightgrey"
Label {
id: messageText
text: model.description
width: parent.width
wrapMode: Label.Wrap
}
Label {
id: dateText
text: "Dec 20, 2019"
wrapMode: Label.Wrap
}
}
}
}
ScrollBar.vertical: ScrollBar {
active: true
}
}
}
最佳答案
实际上,您的问题是您已将标签放在零大小的不可见矩形内(因为它有 height==0
和 width==0
),两者都在位置 (0, 0)
.而不是把 Label
转入 Column
你把 Rectangle
在里面。这就是为什么你有这种重叠。
我个人建议您使用 Layouts
,例如:
Frame {
anchors.centerIn: parent
ListView {
implicitWidth: 250
implicitHeight: 250
clip: true
model: listModel
delegate: RowLayout {
Rectangle {
id: newsicon
width: 16
height: 16
color: "steelblue"
}
ColumnLayout {
Layout.fillWidth: true
spacing: 0
Label {
id: messageText
text: model.description
width: parent.width
wrapMode: Label.WrapAtWordBoundaryOrAnywhere
}
Label {
id: dateText
text: "Dec 20, 2019"
font.italic: true
color: "grey"
wrapMode: Label.WrapAtWordBoundaryOrAnywhere
}
}
}
ScrollBar.vertical: ScrollBar { active: true }
}
}
你将拥有:
关于qt - QML 控件重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56137561/