Genişliği doldurmak için QML Listview boşluk öğeleri

0

Soru

Qml'mde bazı sabit boyutlu öğeler içeren bir ListView (yatay yönlendirme) var. ListView öğesinin tüm genişliğini doldurmak için öğelerin aralıklı olmasını istiyorum. Yani daha az öğe varsa, bunların daha fazla aralıklı olmasını istiyorum. Temel olarak ihtiyacım olan şey tam olarak böyle Layout.fillWidth = true RowLayout özelliği, ancak ListView için.

Kaç öğeye sahip olduğumu sayabilir, ardından toplam öğe genişliğini ListView genişliğinden çıkarabilir, öğe sayısına bölebilir ve aralığı atayabilirim, ancak bunu yapmak çok aptalca görünüyor. Bunu Rowlayout'ta olduğu gibi otomatik olarak yapmanın bir yolu var mı?

enter image description here

Ya da belki bunun için Listview'den farklı bir şey kullanmam gerekiyor mu? RowLayout gibi bir şey ama liste veri modelimi atayabileceğim bir şey mi?

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

En iyi cevabı

1

Ne istediğin ile gerçekleştirebilirsiniz ListView sadece çok sayıda temsilci var istediğinize bağlı aralığını dinamik olarak ayarlamak gerekir. Temsilcileriniz farklı boyuttaysa (bu yalnızca ilk temsilcinin genişliğine dayandığından) veya temsilciler kümülatif olarak temsilcinin genişliğini aşarsa, bu örnek bozulur. 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 bu görev için en uygun kapsayıcı olmayabilir. İnşa etti? " diye ScrollView ve anlaşılan o ki, diğer davranışları hiç gerek yok. İhtiyacınız olan tek şey aynı büyüklükte birkaç delegeden oluşan basit bir sıra ise, scopchanov'a katılıyorum ve inanıyorum ki Repeater içinde bir RowLayout en iyi seçenek olurdu. İşte basit bir örnek:

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

Bunun sola ve sağa boşluklar getirdiğini fark edebilirsiniz, bu boşluklar kabul edilemezse, aşağıdakileri ayarlamanız gerekebilir: spacing on the RowLayout aynı şekilde ListView bunun yerine örnek.

2021-11-16 18:17:48

Diğer dillerde

Bu sayfa diğer dillerde

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