Qt 外孙中断中继器

Qt 外孙中断中继器,qt,qml,repeater,qt5.5,Qt,Qml,Repeater,Qt5.5,为什么这样做:(works=每个代理文本显示在前一个文本的下方) 但这会破坏布局,因为每个文本都出现在彼此的顶部: Column { Repeater { model: ['test1', 'test2', 'test3'] delegate: Item { Text { text: modelData }

为什么这样做:(works=每个代理文本显示在前一个文本的下方)

但这会破坏布局,因为每个文本都出现在彼此的顶部:

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