Elementy przestrzeni listy QML do wypełnienia szerokości

0

Pytanie

Mam widok listy (orientacja pozioma) w moim qml, zawierający pewne elementy o stałym rozmiarze. Chcę, aby elementy znajdowały się w regularnych odstępach, aby wypełnić całą szerokość elementu ListView. Dlatego, jeśli mniej elementów, chcę, aby były one rozłożone więcej. W zasadzie to, co muszę, to jest dokładnie to, co Layout.fillWidth = true właściwość RowLayout, ale dla ListView.

Mogę policzyć, ile mam elementów, a następnie odjąć łączną szerokość elementów z szerokości listy, podzielić na liczbę elementów i wyznaczyć przedział, ale to wydaje się zbyt głupi. Czy istnieje sposób, aby zrobić to automatycznie, jak w RowLayout?

enter image description here

Czy może muszę użyć do tego coś innego od ListView? Coś jak RowLayout, ale którego mogę przypisać własny model danych listy?

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

Najlepsza odpowiedź

1

Możesz osiągnąć to, czego chcesz, z pomocą ListViewpo prostu trzeba dynamicznie regulować odległość w zależności od tego, ile masz delegatów. Przykład ten będzie podzielony, jeśli twoje delegaci mają inny rozmiar (ponieważ to zależy tylko od szerokości pierwszego delegata), lub jeśli uczestnicy łącznie przekraczają szerokości 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 może to nie jest najbardziej odpowiednim pojemniku w celu tego zadania. Mówię to, bo w nim jest wbudowany ScrollView i inne formy zachowania, które, jak się wydaje, nie są ci potrzebne. Jeśli wszystko, czego potrzebujesz-jest to prosty szereg z kilku delegatów równej wielkości, zgadzam się z скопчановым i uważam, że Repeater wewnątrz a RowLayout byłoby najlepszym rozwiązaniem. Oto prosty przykład:

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

Można zauważyć, że to prowadzi do pojawienia się spacji z lewej i prawej strony, jeśli te luki nie do przyjęcia, być może trzeba zainstalować spacing na RowLayout w taki sam sposób, jak i ListView zamiast tego przykład.

2021-11-16 18:17:48

W innych językach

Ta strona jest w innych językach

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