QML Listview spațiu articole pentru a umple lățimea

0

Problema

Am un ListView (orientare orizontală) în qml conțin unele de dimensiuni fixe elemente. Vreau ca articolele să fie distanțate pentru a umple entiew lățime de ListView element. Deci, dacă există mai puțin elementele vreau ca ei să fie distanțate mai mult. Practic, ceea ce am nevoie este exact ca Layout.fillWidth = true proprietatea RowLayout dar pentru ListView.

Pot conta cât de multe elemente trebuie, apoi scade numărul total de elemente lățime de ListView lățime, diviza de elemente luate în considerare și de a atribui spațiere dar se pare stupid de-a face. Există o modalitate de a face acest lucru în mod automat, ca în RowLayout?

enter image description here

Sau poate trebuie sa folosesc ceva diferit de ListView pentru asta? Ceva de genul RowLayout, dar că nu pot atribui lista mea de date model?

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

Cel mai bun răspuns

1

Poți realiza ceea ce vrei cu un ListViewai nevoie doar de a ajusta spațierea dinamic în funcție de cât de mulți delegați ai. Acest exemplu va rupe în jos dacă delegații sunt diferit-dimensiuni (ca asta se bazeaza doar pe lățimea primul delegat), sau dacă delegații, cumulativ, depășește lățimea de 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 nu poate fi mai recipient adecvat pentru această sarcină. Spun acest lucru pentru că ea are o construit în ScrollView și alte comportamente care se pare ca nu ai nevoie. Dacă tot ce ai nevoie este un simplu rând de câteva identic cu dimensiuni de delegați, sunt de acord cu scopchanov și cred că o Repeater în interiorul unui RowLayout ar fi cea mai bună opțiune. Aici este un exemplu simplu:

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

Este posibil să observați că aceasta prezintă lacune la stânga și la dreapta, dacă aceste lacune sunt inacceptabile, poate fi necesar să setați spacing pe RowLayout în același mod ca ListView exemplu în loc.

2021-11-16 18:17:48

În alte limbi

Această pagină este în alte limbi

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