QML ListView 锚点,margin = 0 超出父填充?
QML ListView anchor, margin = 0 goes outside parent fill?
我想知道为什么这会在 Item
填充之外绘制 Icon
组件?使用 Qt 5.5.1
import QtQuick 2.5
Item {
id: root
// width: 960 // Actually set in the higher level view
// height: 540 // Actually set in the higher level view
ListModel {
id: items
ListElement { icon: 'a.png', label: 'Example', x: 0, y: 0 }
ListElement { icon: 'b.png', label: 'Something', x: 100, y: 0 }
ListElememt { icon: 'c.png', label: 'Testing', x: 200, y: 50 }
}
ListView {
model: items
delegate: Icon {
text: model.label
iconSrc: model.icon
anchors {
top: parent.top
left: parent.left
leftMargin: model.x
topMargin: model.y
}
}
anchors {
top: parent.top
left: parent.left
}
}
}
前两个图标 (y = 0) 将出现在包含 Item
的 外部 约 15 像素处,当它位于更高级别的视图中时。
如果我按以下方式执行(没有 ListView),它们会出现在正确的位置 (y = 0),即。当在更高级别的视图中使用时,它们将位于包含 Item
的内部。
import QtQuick 2.5
Item {
id: root
// width: 960 // Actually set in the higher level view
// height: 540 // Actually set in the higher level view
Icon {
text: 'Example'
iconSrc: 'a.png'
anchors {
top: parent.top
left: parent.left
leftMargin: 0
topMargin: 0
}
}
Icon {
text: 'Something'
iconSrc: 'b.png'
anchors {
top: parent.top
left: parent.left
leftMargin: 100
topMargin: 0
}
}
Icon {
text: 'Testing'
iconSrc: 'c.png'
anchors {
top: parent.top
left: parent.left
leftMargin: 200
topMargin: 50
}
}
}
为什么 Icon
组件在 ListView 内部生成时呈现在与直接定义不同的位置,当两者使用相同的 "X, Y" 值时?
ListView的objective是将一组项目显示为列表,因此无法建立锚点,因为几何由ListView处理,必须使用Repeater:
import QtQuick 2.5
Item {
id: root
// width: 960 // Actually set in the higher level view
// height: 540 // Actually set in the higher level view
ListModel{
id: items
ListElement { icon: 'a.png'; label: 'Example'; x: 0; y: 0 }
ListElement { icon: 'b.png'; label: 'Something'; x: 100; y: 0 }
ListElement { icon: 'c.png'; label: 'Testing'; x: 200; y: 50 }
}
Repeater {
model: items
delegate: Icon {
text: model.label
source: model.icon
anchors {
top: parent.top
left: parent.left
leftMargin: model.x
topMargin: model.y
}
}
}
}
我想知道为什么这会在 Item
填充之外绘制 Icon
组件?使用 Qt 5.5.1
import QtQuick 2.5
Item {
id: root
// width: 960 // Actually set in the higher level view
// height: 540 // Actually set in the higher level view
ListModel {
id: items
ListElement { icon: 'a.png', label: 'Example', x: 0, y: 0 }
ListElement { icon: 'b.png', label: 'Something', x: 100, y: 0 }
ListElememt { icon: 'c.png', label: 'Testing', x: 200, y: 50 }
}
ListView {
model: items
delegate: Icon {
text: model.label
iconSrc: model.icon
anchors {
top: parent.top
left: parent.left
leftMargin: model.x
topMargin: model.y
}
}
anchors {
top: parent.top
left: parent.left
}
}
}
前两个图标 (y = 0) 将出现在包含 Item
的 外部 约 15 像素处,当它位于更高级别的视图中时。
如果我按以下方式执行(没有 ListView),它们会出现在正确的位置 (y = 0),即。当在更高级别的视图中使用时,它们将位于包含 Item
的内部。
import QtQuick 2.5
Item {
id: root
// width: 960 // Actually set in the higher level view
// height: 540 // Actually set in the higher level view
Icon {
text: 'Example'
iconSrc: 'a.png'
anchors {
top: parent.top
left: parent.left
leftMargin: 0
topMargin: 0
}
}
Icon {
text: 'Something'
iconSrc: 'b.png'
anchors {
top: parent.top
left: parent.left
leftMargin: 100
topMargin: 0
}
}
Icon {
text: 'Testing'
iconSrc: 'c.png'
anchors {
top: parent.top
left: parent.left
leftMargin: 200
topMargin: 50
}
}
}
为什么 Icon
组件在 ListView 内部生成时呈现在与直接定义不同的位置,当两者使用相同的 "X, Y" 值时?
ListView的objective是将一组项目显示为列表,因此无法建立锚点,因为几何由ListView处理,必须使用Repeater:
import QtQuick 2.5
Item {
id: root
// width: 960 // Actually set in the higher level view
// height: 540 // Actually set in the higher level view
ListModel{
id: items
ListElement { icon: 'a.png'; label: 'Example'; x: 0; y: 0 }
ListElement { icon: 'b.png'; label: 'Something'; x: 100; y: 0 }
ListElement { icon: 'c.png'; label: 'Testing'; x: 200; y: 50 }
}
Repeater {
model: items
delegate: Icon {
text: model.label
source: model.icon
anchors {
top: parent.top
left: parent.left
leftMargin: model.x
topMargin: model.y
}
}
}
}