QML Listview prostor položek k vyplnění, šířka

0

Otázka

Mám ListView (horizontální orientace) v mém qml obsahující některé pevné velikosti prvků. Chci, aby položky, které mají být rozmístěny vyplnit entiew šířka prvek ListView. Takže pokud tam jsou menší prvky, chci jim být rozmístěny více. V podstatě to, co potřebuji, je přesně jako Layout.fillWidth = true vlastnost RowLayout ale pro ListView.

Umím spočítat, kolik položek mám, pak odečíst celkem položek šířka od ListView šířka, vydělte počet položek a přiřadit mezery, ale to se zdá příliš hloupé. Existuje způsob, jak to udělat automaticky, jako v RowLayout?

enter image description here

Nebo možná budu muset použít něco jiného z ListView? Něco jako RowLayout ale které lze přiřadit mém seznamu datový model?

listview qml qt spacing
2021-11-16 13:34:02
1

Nejlepší odpověď

1

Můžete dosáhnout, co chcete s ListView, stačí upravit mezery dynamicky na základě toho, jak mnoho delegátů máte. Tento příklad budou zlomit dolů, pokud vaše delegáti jsou různě velké (jako je to založeno pouze na šířku první delegát), nebo v případě, že delegáti kumulativně překročit šířku ListView.

ListView {
    width: 500
    orientation: Qt.Horizontal
    model: 6
    spacing: {
        if (count > 0) {
            return (width - (itemAtIndex(0).width * count))/(count - 1)
        } else {
            return 0
        }
    }

    delegate: Rectangle {
        implicitHeight: 50
        implicitWidth: 50
        color: "red"
        border.width: 1
    }
}

6 delegates 4 delegates

ListView nemusí být nejvhodnější kontejner pro tento úkol. Říkám to, protože to má vestavěný ScrollView a jiné chování, že to zní, jako jste vy nepotřebujeme. Pokud vše, co potřebujete, je jednoduchý řádek pár identicky velikosti delegátů, souhlasím s scopchanov a věří, že Repeater uvnitř RowLayout by bylo nejlepší volbou. Zde je jednoduchý příklad:

RowLayout {
    width: 500

    Repeater {
        model: 6
        delegate: Rectangle {
            implicitHeight: 50
            implicitWidth: 50
            color: "tomato"
            border.width: 1
            Layout.alignment: Qt.AlignHCenter // must be set to align the rectangles within their empty space
        }
    }
}

6 delegates 4 delegates

Můžete si všimnout, že to zavádí mezery vlevo a vpravo, pokud tyto nedostatky jsou nepřijatelné, budete možná muset nastavit spacing na RowLayout stejným způsobem jako ListView příklad místo.

2021-11-16 18:17:48

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................