PROGRAM Listview priestor položky vyplniť šírka

0

Otázka

Mám ListView (horizontálna orientácia) v mojej požiadavky, ktoré obsahujú niektoré pevnou veľkosťou prvky. Chcem položky, ktoré majú byť rozložená na vyplnenie entiew šírka ListView prvok. Takže ak tam je menej prvkov chcem im byť rozložená viac. V podstate to, čo potrebujem, je presne ako Layout.fillWidth = true majetok RowLayout ale pre ListView.

Môžem počítať, koľko položiek mám, potom odpočítame celkové položky, šírka od ListView šírka, vydelíme položiek, počet a priradiť medzery, ale zdá sa, že príliš hlúpe robiť. Existuje spôsob, ako to urobiť automaticky, ako v RowLayout?

enter image description here

Alebo možno by som mal použiť niečo odlišné od ListView za to? Niečo ako RowLayout, ale že môžem priradiť môj zoznam údajov model?

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

Najlepšiu odpoveď

1

Môžete dosiahnuť to, čo chcete s ListViewstačí nastaviť riadkovanie dynamicky na základe toho, koľko delegátov máte. Tento príklad bude rozobrať ak váš delegátov sú rôzne veľkosti (ako je to založené len na šírku prvého delegáta), alebo ak delegátov kumulatívne presiahnuť šírku 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í byť najvhodnejšie nádoby pre túto úlohu. Hovorím to, pretože to má vstavaný ScrollView a iné správanie, ktoré znie to ako nepotrebujete. Ak všetko, čo potrebujete, je jednoduchý riadok niekoľko identicky veľkosti delegátov, súhlasím s scopchanov a domnievať sa, že Repeater vo vnútri RowLayout bude to najlepšia voľba. Tu je jednoduchý prí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šimnúť, že tento zavádza medzery na ľavej a pravej, ak tieto medzery sú neprijateľné, budete možno musieť nastaviť spacing na RowLayout rovnakým spôsobom ako ListView príklad miesto.

2021-11-16 18:17:48

V iných jazykoch

Táto stránka je v iných jazykoch

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