孙子打破中继器
Grandchild breaks repeater
为什么这样做:(有效 = 每个委托文本都出现在前一个文本的下方)
Column {
Repeater {
model: ['test1', 'test2', 'test3']
delegate: Text {
text: modelData
}
}
}
但这会破坏布局,因为每个文本都出现在彼此的顶部:
Column {
Repeater {
model: ['test1', 'test2', 'test3']
delegate: Item {
Text {
text: modelData
}
}
}
}
如果我创建一个单独的组件,同样的事情会发生:
MyTextItem.qml
import QtQuick 2.5
Item {
property string myText: ''
Text {
text: myText
}
}
然后:
Column {
Repeater {
model: ['test1', 'test2', 'test3']
delegate: MyTextItem {
myText: modelData
}
}
}
问题很简单:Column 基于委托的 topItem 的几何形状,在您的初始情况下,Text 具有基于内容的 implicitWidth 和 implicitHeight,但 Item 的几何形状为 0x0,导致它们重叠。解决方案是为 Item 建立适当的几何形状,例如它采用与 Text 相同的大小:
Column {
Repeater {
model: ['test1', 'test2', 'test3']
delegate: Item{
<b>implicitWidth: txt.implicitWidth
implicitHeight: txt.implicitHeight</b>
Text {
id: txt
text: modelData
}
}
}
}
为什么这样做:(有效 = 每个委托文本都出现在前一个文本的下方)
Column {
Repeater {
model: ['test1', 'test2', 'test3']
delegate: Text {
text: modelData
}
}
}
但这会破坏布局,因为每个文本都出现在彼此的顶部:
Column {
Repeater {
model: ['test1', 'test2', 'test3']
delegate: Item {
Text {
text: modelData
}
}
}
}
如果我创建一个单独的组件,同样的事情会发生:
MyTextItem.qml
import QtQuick 2.5
Item {
property string myText: ''
Text {
text: myText
}
}
然后:
Column {
Repeater {
model: ['test1', 'test2', 'test3']
delegate: MyTextItem {
myText: modelData
}
}
}
问题很简单:Column 基于委托的 topItem 的几何形状,在您的初始情况下,Text 具有基于内容的 implicitWidth 和 implicitHeight,但 Item 的几何形状为 0x0,导致它们重叠。解决方案是为 Item 建立适当的几何形状,例如它采用与 Text 相同的大小:
Column {
Repeater {
model: ['test1', 'test2', 'test3']
delegate: Item{
<b>implicitWidth: txt.implicitWidth
implicitHeight: txt.implicitHeight</b>
Text {
id: txt
text: modelData
}
}
}
}