QML Listview elementos del espacio para llenar el ancho de

0

Pregunta

Tengo un ListView (orientación horizontal) en mi qml que contiene algunos de tamaño fijo de elementos. Quiero elementos a estar separados para llenar el entiew ancho de elemento ListView. Así que si hay menos elementos de quiero ser espaciadas más. Básicamente lo que necesito es exactamente igual Layout.fillWidth = true propiedad de RowLayout pero para ListView.

Puedo contar la cantidad de artículos que tengo, luego reste el total de elementos de la anchura de ListView ancho, divide por el recuento de elementos y asignar el espacio, pero parece demasiado tonto para hacer. Hay una manera de hacer esto de forma automática como en RowLayout?

enter image description here

O tal vez tengo que usar algo diferente de ListView para esto? Algo así como RowLayout pero que puedo ceder mi lista modelo de datos?

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

Mejor respuesta

1

Usted puede lograr lo que se desea con una ListViewusted sólo necesita ajustar el espaciado de forma dinámica basándose en cómo muchos de los delegados que usted tiene. En este ejemplo se va a romper si sus delegados son de diferentes tamaños (ya que esto se basa sólo en el ancho de la primera delegado), o si los delegados de forma acumulativa exceder el ancho 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 puede no ser la más adecuada contenedor para esta tarea. Digo esto porque se ha construido en ScrollView y otros comportamientos que suena como que usted no necesita. Si todo lo que usted necesita es una simple fila de un par de idéntico tamaño delegados, estoy de acuerdo con scopchanov y creemos que una Repeater en el interior de un RowLayout sería la mejor opción. He aquí un ejemplo sencillo:

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

Usted puede notar que este presenta deficiencias a la derecha y la izquierda, estas brechas son inaceptables, puede que sea necesario establecer la spacing en el RowLayout de la misma manera como la ListView ejemplo lugar.

2021-11-16 18:17:48

En otros idiomas

Esta página está en otros idiomas

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