孙子打破中继器

Juh*_*nen 2 qt repeater qml qt5.5

为什么这样做:(有效 = 每个代表文本都出现在前一个下方)

    Column {
        Repeater {
            model: ['test1', 'test2', 'test3']
            delegate: Text {
                text: modelData
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但这打破了布局,因为每个文本都出现在彼此之上:

    Column {
        Repeater {
            model: ['test1', 'test2', 'test3']
            delegate: Item {
                Text {
                    text: modelData
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果我创建一个单独的组件,也会发生同样的事情:

我的文本项.qml

import QtQuick 2.5

Item {
    property string myText: ''
    Text {
       text: myText
    }
}
Run Code Online (Sandbox Code Playgroud)

进而:

    Column {
        Repeater {
            model: ['test1', 'test2', 'test3']
            delegate: MyTextItem {
                myText: modelData
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

eyl*_*esc 5

问题很简单:列基于委托的 topItem 的几何形状,在您的初始情况下,Text 有一个基于内容的 implicitWidth 和 implicitHeight,但一个 Item 的几何形状为 0x0,导致它们重叠。解决方案是为 Item 建立适当的几何图形,例如它采用相同大小的 Text:

Column {
    Repeater {
        model: ['test1', 'test2', 'test3']
        delegate: Item{
            implicitWidth: txt.implicitWidth
            implicitHeight: txt.implicitHeight
            Text {
                id: txt
                text: modelData
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)