Ретранслятор ломает внуков - PullRequest
2 голосов
/ 31 марта 2020

Почему это работает: (работает = каждый текст делегата появляется ниже предыдущего)

    Column {
        Repeater {
            model: ['test1', 'test2', 'test3']
            delegate: Text {
                text: modelData
            }
        }
    }

enter image description here

Но это нарушает макет, как в каждом тексте появляется друг над другом:

    Column {
        Repeater {
            model: ['test1', 'test2', 'test3']
            delegate: Item {
                Text {
                    text: modelData
                }
            }
        }
    }

enter image description here

То же самое происходит, если я создаю отдельный компонент:

MyTextItem.qml

import QtQuick 2.5

Item {
    property string myText: ''
    Text {
       text: myText
    }
}

А затем:

    Column {
        Repeater {
            model: ['test1', 'test2', 'test3']
            delegate: MyTextItem {
                myText: modelData
            }
        }
    }

enter image description here

1 Ответ

5 голосов
/ 31 марта 2020

Проблема проста: столбец основан на геометрии делегата topItem, в вашем первоначальном случае Text имеет implicitWidth и implicitHeight, основанные на содержимом, но Item имеет геометрию 0x0, что приводит к их перекрытию. Решение состоит в том, чтобы установить sh подходящую геометрию для элемента, например, чтобы он занимал тот же размер текста:

Column {
    Repeater {
        model: ['test1', 'test2', 'test3']
        delegate: Item{
            <b>implicitWidth: txt.implicitWidth
            implicitHeight: txt.implicitHeight</b>
            Text {
                id: txt
                text: modelData
            }
        }
    }
}
...