QML Listview l'espace des éléments pour remplir la largeur

0

La question

J'ai une ListView (orientation horizontale) dans mon qml contenant certains de taille fixe les éléments. Je veux les éléments pour être espacés de manière à remplir la entiew largeur de l'élément ListView. Donc si il y a moins d'éléments que je voudrais être espacées de plus. Fondamentalement, ce que j'ai besoin est exactement comme Layout.fillWidth = true propriété de RowLayout mais pour ListView.

Je peux compter le nombre d'éléments que j'ai, puis soustraire le total des éléments d'une largeur de ListView largeur, divisez par les points de comptage et d'attribuer l'espacement mais il semble trop stupide pour le faire. Est-il un moyen de le faire automatiquement comme dans RowLayout?

enter image description here

Ou peut-être que j'ai besoin d'utiliser quelque chose de différent à partir de ListView pour cela? Quelque chose comme RowLayout mais que je peux céder ma liste modèle de données?

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

La meilleure réponse

1

Vous pouvez accomplir ce que vous voulez avec un ListView, vous avez juste besoin d'ajuster l'espacement de façon dynamique en fonction du nombre de délégués que vous avez. Cet exemple permet de briser si vos délégués sont de taille différente (comme cela est basé seulement sur la largeur de la première délégué), ou si les délégués cumulativement dépasser la largeur de la 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 peut-être pas le plus récipient approprié pour cette tâche. Je dis cela parce qu'il a construit dans le ScrollView et d'autres comportements qui il semble que vous n'avez pas besoin. Si vous avez besoin d'une simple rangée de quelques-uns de taille identique délégués, je suis d'accord avec scopchanov et qui croient qu'un Repeater à l'intérieur d'un RowLayout serait la meilleure option. Voici un exemple simple:

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

Vous remarquerez peut-être que cela introduit des lacunes à gauche et à droite, si ces lacunes sont inacceptables, vous devrez définir le spacing sur le RowLayout de la même manière que le ListView exemple à la place.

2021-11-16 18:17:48

Dans d'autres langues

Cette page est dans d'autres langues

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