Qt 外孙中断中继器
为什么这样做:(works=每个代理文本显示在前一个文本的下方) 但这会破坏布局,因为每个文本都出现在彼此的顶部:Qt 外孙中断中继器,qt,qml,repeater,qt5.5,Qt,Qml,Repeater,Qt5.5,为什么这样做:(works=每个代理文本显示在前一个文本的下方) 但这会破坏布局,因为每个文本都出现在彼此的顶部: Column { Repeater { model: ['test1', 'test2', 'test3'] delegate: Item { 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
}
}
}
问题很简单:列基于代理topItem的几何图形,在初始情况下,文本具有基于内容的隐式宽度和隐式高度,但项的几何图形为0x0,导致它们重叠。解决方案是为项目建立适当的几何图形,例如,它采用相同大小的文本:
Column {
Repeater {
model: ['test1', 'test2', 'test3']
delegate: Item{
implicitWidth: txt.implicitWidth
implicitHeight: txt.implicitHeight
Text {
id: txt
text: modelData
}
}
}
}
列{
中继器{
模型:['test1','test2','test3']
代表:议程项目{
implicitWidth:txt.implicitWidth
implicitHeight:txt.implicitHeight
正文{
id:txt
文本:modelData
}
}
}
}
是的,这很有效。我认为当您这样做时,应该会生成一个警告,因为这很容易被忽略,我认为更常见的用例是将项目“排列”起来,而不是堆叠起来。
Column {
Repeater {
model: ['test1', 'test2', 'test3']
delegate: Item{
implicitWidth: txt.implicitWidth
implicitHeight: txt.implicitHeight
Text {
id: txt
text: modelData
}
}
}
}