孙子打破中继器

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
            }
        }
    }
}