Sur cette page

ListView QML Type

Affiche une liste des éléments fournis par un modèle. En savoir plus…

Import Statement: import QtQuick
Inherits:

Flickable

Propriétés

Propriétés associées

Signaux associés

Méthodes

Description détaillée

Une ListView affiche les données provenant de modèles créés à partir de types QML intégrés tels que ListModel et XmlListModel, ou de classes de modèles personnalisées définies en C++ qui héritent de QAbstractItemModel ou QAbstractListModel.

Un ListView dispose d’un model, qui définit les données à afficher, et d’un delegate, qui définit la manière dont ces données doivent être affichées. Les éléments d’un ListView sont disposés horizontalement ou verticalement. Les ListView sont intrinsèquement « feuilletables », car ListView hérite de Flickable.

Remarque : une ListView ne chargera que le nombre d'éléments délégués nécessaire pour remplir la vue. Les éléments situés en dehors de la vue ne seront pas chargés, à moins qu'une cacheBuffer suffisante n'ait été définie. Par conséquent, une ListView dont la largeur ou la hauteur est nulle peut ne charger aucun élément délégué.

Exemple d’utilisation

L'exemple suivant montre la définition d'un modèle de liste simple défini dans un fichier nommé ` ContactModel.qml` :

import QtQuick

ListModel {
    ListElement {
        name: "Bill Smith"
        number: "555 3264"
    }
    ListElement {
        name: "John Brown"
        number: "555 8426"
    }
    ListElement {
        name: "Sam Wise"
        number: "555 0473"
    }
}

Un autre composant peut afficher les données de ce modèle dans une ListView, comme ceci :

import QtQuick

ListView {
    width: 180; height: 200

    model: ContactModel {}
    delegate: Text {
        required property string name
        required property string number
        text: name + ": " + number
    }
}

ListView affichant trois contacts avec leurs noms et numéros de téléphone

Ici, la ListView crée un composant « ContactModel » pour son modèle, et un élément « Text » pour son délégué. La vue créera un nouveau composant « Text » pour chaque élément du modèle. Notez que le délégué peut accéder directement aux données « name » et « number » du modèle.

Une vue de liste améliorée est présentée ci-dessous. L'apparence du délégué a été améliorée et celui-ci a été déplacé dans un composant contactDelegate distinct.

Rectangle {
    width: 180; height: 200

    Component {
        id: contactDelegate
        Item {
            id: myItem
            required property string name
            required property string number
            width: 180; height: 40
            Column {
                Text { text: '<b>Name:</b> ' + myItem.name }
                Text { text: '<b>Number:</b> ' + myItem.number }
            }
        }
    }

    ListView {
        anchors.fill: parent
        model: ContactModel {}
        delegate: contactDelegate
        highlight: Rectangle { color: "lightsteelblue"; radius: 5 }
        focus: true
    }
}

ListView avec des éléments de contact stylisés et une surbrillance bleue sur la sélection actuelle

L'élément actuellement sélectionné est mis en évidence à l’aide d’un Rectangle bleu grâce à la propriété highlight, et focus est défini sur true afin de permettre la navigation au clavier dans la vue de liste. La vue de liste elle-même constitue une zone de focus (voir Focus clavier dans Qt Quick pour plus de détails).

Les délégués sont instanciés selon les besoins et peuvent être détruits à tout moment. Ainsi, state should never be stored in a delegate. Les délégués sont généralement rattachés à l’ contentItem de la ListView, mais selon qu’ils sont visibles ou non dans la vue, le parent peut changer et être parfois null. C’est pourquoi il n’ est pas recommandé de lier les propriétés du parent depuis l’intérieur du délégué. Si vous souhaitez que le délégué occupe toute la largeur de la ListView, envisagez plutôt d’utiliser l’une des approches suivantes :

ListView {
    id: listView
    // ...

    delegate: Item {
        // Incorrect.
        width: parent.width

        // Correct.
        width: listView.width
        width: ListView.view.width
        // ...
    }
}

ListView associe un certain nombre de propriétés à l’élément racine du délégué, par exemple ` ListView.isCurrentItem`. Dans l’exemple suivant, l’élément racine du délégué peut accéder directement à cette propriété associée via ` ListView.isCurrentItem`, tandis que l’objet enfant ` contactInfo ` doit faire référence à cette propriété via ` wrapper.ListView.isCurrentItem`.

ListView {
    width: 180; height: 200

    Component {
        id: contactsDelegate
        Rectangle {
            id: wrapper
            width: 180
            height: contactInfo.height
            color: ListView.isCurrentItem ? "black" : "red"
            Text {
                id: contactInfo
                text: name + ": " + number
                color: wrapper.ListView.isCurrentItem ? "red" : "black"
            }
        }
    }

    model: ContactModel {}
    delegate: contactsDelegate
    focus: true
}

Remarque : les vues n’activent pas automatiquement le découpage. Si la vue n’est pas découpée par un autre élément ou par l’écran, il sera nécessaire de définir `clip: true` afin que les éléments hors champ soient correctement découpés.

Mises en page de ListView

La disposition des éléments dans une ListView peut être contrôlée à l'aide des propriétés suivantes :

  • orientation - détermine si les éléments s'affichent horizontalement ou verticalement. Cette valeur peut être soit Qt.Horizontal, soit Qt.Vertical.
  • layoutDirection - contrôle le sens de disposition horizontale pour une vue orientée horizontalement : c’est-à-dire si les éléments sont disposés de la gauche vers la droite de la vue, ou inversement. Cette valeur peut être soit Qt.LeftToRight, soit Qt.RightToLeft.
  • verticalLayoutDirection - contrôle le sens de disposition verticale pour une vue orientée verticalement : c'est-à-dire si les éléments sont disposés du haut de la vue vers le bas, ou inversement. Cette valeur peut être soit ListView.TopToBottom, soit ListView.BottomToTop.

Par défaut, une ListView est orientée verticalement et les éléments sont disposés de haut en bas. Le tableau ci-dessous présente les différentes dispositions possibles d'une ListView, en fonction des valeurs des propriétés énumérées ci-dessus.

ListViews avec une orientation Qt.Vertical
De haut en bas

Liste verticale comprenant les éléments 0 à 4, classés de haut en bas

De bas en haut

Liste verticale dont les éléments 0 à 4 sont classés de bas en haut

ListViews avec une orientation Qt.Horizontal
De gauche à droite

Liste horizontale comportant les éléments 0 à 4, classés de gauche à droite

De droite à gauche

Liste horizontale dont les éléments 0 à 4 sont classés de droite à gauche

Direction de défilement

Par défaut, une ListView verticale définit flickableDirection sur Flickable.Vertical, et une ListView horizontale le définit sur Flickable.Horizontal. De plus, une ListView verticale ne calcule (estime) que l'contentHeight, et une ListView horizontale ne calcule que l'contentWidth. L'autre dimension est définie sur -1.

Depuis Qt 5.9 (Qt Quick 2.9), il est possible de créer une ListView pouvant être parcourue par un mouvement de balayage dans les deux sens. Pour ce faire, la propriété « flickableDirection » peut être définie sur « Flickable.AutoFlickDirection » ou « Flickable.AutoFlickIfNeeded », et les valeurs souhaitées pour « contentWidth » ou « contentHeight » doivent être fournies.

ListView {
    width: 180; height: 200

    contentWidth: 320
    flickableDirection: Flickable.AutoFlickDirection

    model: ContactModel {}
    delegate: Row {
        Text { text: '<b>Name:</b> ' + name; width: 160 }
        Text { text: '<b>Number:</b> ' + number; width: 160 }
    }
}

Ordre d’empilement dans ListView

L'Z value e des éléments détermine s'ils s'affichent au-dessus ou en dessous des autres éléments. La ListView utilise plusieurs valeurs Z par défaut, en fonction du type d'élément créé :

PropriétéValeur Z par défaut
delegate1
footer1
header1
highlight0
section.delegate2

Ces valeurs par défaut sont définies si la valeur Z de l'élément est 0; par conséquent, définir la valeur Z de ces éléments sur 0 n'a aucun effet. Notez que la valeur Z est de type real; il est donc possible de définir des valeurs fractionnaires telles que 0.1.

Réutilisation des éléments

Depuis la version 5.15, ListView peut être configuré pour recycler les éléments au lieu de les instancier à partir de delegate chaque fois que de nouvelles lignes sont fait glisser à l’écran. Cette approche améliore les performances, en fonction de la complexité du délégué. La réutilisation des éléments est désactivée par défaut (pour des raisons de compatibilité ascendante), mais peut être activée en définissant la propriété reuseItems sur true.

Lorsqu’un élément est fait disparaître d’un geste, il est déplacé vers le pool de réutilisation, qui est un cache interne d’éléments inutilisés. Dans ce cas, le signal ` ListView::pooled ` est émis pour en informer l’élément. De même, lorsque l’élément est récupéré depuis le pool, le signal ` ListView::reused ` est émis.

Toutes les propriétés de l'élément provenant du modèle sont mises à jour lorsque l'élément est réutilisé. Cela inclut « index » et « row », mais aussi tous les rôles du modèle.

Remarque : Avoid storing any state inside a delegate. Si vous le faites, réinitialisez-le manuellement à la réception du signal « ListView::reused ».

Si un élément comporte des minuteries ou des animations, pensez à les mettre en pause à la réception du signal « ListView::pooled ». Vous éviterez ainsi de mobiliser les ressources du processeur pour des éléments qui ne sont pas visibles. De même, si un élément dispose de ressources qui ne peuvent pas être réutilisées, celles-ci peuvent être libérées.

Remarque : tant qu’ un élément se trouve dans le pool, il peut rester actif et répondre aux signaux et liaisons qui lui sont associés.

Remarque : pour qu’ un élément soit placé dans le pool, il doit être entièrement déplacé hors des limites de la vue, y compris les marges supplémentaires définies avec cacheBuffer. Certains éléments ne seront jamais placés dans le pool ni réutilisés, comme currentItem.

L’exemple suivant présente un délégué qui anime un rectangle tournant. Lorsqu’il est placé dans le pool, l’animation est temporairement mise en pause :

Component {
    id: listViewDelegate
    Rectangle {
        width: 100
        height: 50

        ListView.onPooled: rotationAnimation.pause()
        ListView.onReused: rotationAnimation.resume()

        Rectangle {
            id: rect
            anchors.centerIn: parent
            width: 40
            height: 5
            color: "green"

            RotationAnimation {
                id: rotationAnimation
                target: rect
                duration: (Math.random() * 2000) + 200
                from: 0
                to: 359
                running: true
                loops: Animation.Infinite
            }
        }
    }
}

Taille variable du délégué et étiquettes de section

Les tailles variables des délégués peuvent entraîner un redimensionnement et le saut de tout élément « ScrollBar » associé. En effet, ListView estime la taille de son contenu à partir des éléments alloués (généralement uniquement les éléments visibles, les autres étant supposés de taille similaire), et les tailles variables des délégués empêchent une estimation précise. Pour atténuer cet effet, on peut définir des valeurs plus élevées pour ` cacheBuffer `, ce qui crée effectivement davantage d’éléments et améliore l’estimation de la taille des éléments non alloués, au prix d’une consommation de mémoire supplémentaire. Les ` Sections ` ont le même effet, car ils associent et allongent l’étiquette de section jusqu’au premier élément de la section.

Évitez de stocker l'état dans les délégués

Les délégués de ListView sont instanciés à la demande et peuvent être détruits lorsqu’ils ne sont plus visibles. Pour illustrer ce phénomène, exécutez l’exemple suivant :

ListView {
    anchors.fill: parent
    model: 3
    delegate: CheckDelegate {
        text: qsTr("Channel %1").arg(index + 1)

        required property int index
        property bool channelActivated

        onClicked: channelActivated = checked
    }
}

Lorsqu’on clique sur un élément, ` channelActivated ` est défini sur ` true`. Cependant, comme les délégués peuvent être ` reused ` et détruits, tout l’état est perdu lorsque la vue est déplacée suffisamment loin. Lorsque le délégué redevient visible, il retrouve son état par défaut, non modifié (ou, dans le cas d’un élément réutilisé, l’ancien état d’un élément précédent).

Pour éviter cela, l’état doit être stocké dans le modèle :

ListView {
    anchors.fill: parent
    model: ListModel {
        ListElement {
            channelActivated: true
        }
        // ...
    }
    delegate: CheckDelegate {
        text: qsTr("Channel %1").arg(index + 1)
        checked: model.channelActivated

        required property int index
        required property var model

        onClicked: model.channelActivated = checked
    }
}

Masquer des délégués

Définir la propriété ` visible ` d’un délégué sur ` false ` masquera cet élément, mais l’espace qu’il occupait dans la vue sera conservé. Il est possible de définir la propriété ` height ` de l’élément sur ` 0 ` (pour une `ListView` de type ` vertical `) :

ListView {
    anchors.fill: parent
    model: ListModel {
        ListElement { hidden: false }
        ListElement { hidden: false }
        ListElement { hidden: false }
        // ...
    }
    delegate: ItemDelegate {
        text: qsTr("Item %1").arg(index)
        visible: !model.hidden
        height: visible ? implicitHeight : 0

        required property int index
        required property var model

        onClicked: model.hidden = true
    }
}

Notez que l’état « masqué » est stocké dans le modèle, conformément aux recommandations de la section Avoid Storing State in Delegates.

Cependant, si la valeur de ` spacing ` est différente de zéro, des espaces irréguliers apparaîtront entre les délégués.

Une meilleure option consiste à filtrer votre modèle afin que les éléments qui ne doivent pas être visibles ne soient pas chargés du tout par la vue. Cela peut être réalisé à l'aide de ` QSortFilterProxyModel`.

Une autre option consiste à appeler ` disable ` sur le délégué au lieu de le masquer.

Voir également Modèles de données QML, GridView, PathView et Exemples d’Qt Quick s - Vues.

Documentation sur les propriétés

add : Transition

Cette propriété définit la transition à appliquer aux éléments ajoutés à la vue.

Voici, par exemple, une vue qui spécifie une telle transition :

ListView {
    ...
    add: Transition {
        NumberAnimation { properties: "x,y"; from: 100; duration: 1000 }
    }
}

Chaque fois qu’un élément est ajouté à la vue ci-dessus, celui-ci sera animé depuis la position (100,100) jusqu’à sa position finale en x et y au sein de la vue, en l’espace d’une seconde. La transition s'applique uniquement aux nouveaux éléments ajoutés à la vue ; elle ne s'applique pas aux éléments situés en dessous qui sont déplacés par l'ajout des nouveaux éléments. Pour animer les éléments déplacés, définissez les propriétés ` displaced ` ou ` addDisplaced `.

Pour plus de détails et d’exemples sur l’utilisation des transitions de vue, consultez la documentation relative à la propriété ` ViewTransition `.

Remarque : cette transition ne s’applique pas aux éléments créés lors du remplissage initial de la vue, ni lorsque la propriété ` model ` de la vue change. (Dans ces cas-là, c’est la transition ` populate ` qui s’applique à la place.) De plus, cette transition ne doit pas animer la hauteur du nouvel élément ; cela entraînerait un mauvais positionnement des éléments situés sous ce dernier. La hauteur peut en revanche être animée au sein du gestionnaire ` onAdd ` dans le délégué.

Voir également addDisplaced, populate et ViewTransition.

addDisplaced : Transition

Cette propriété définit la transition à appliquer aux éléments de la vue qui sont déplacés suite à l'ajout d'autres éléments dans celle-ci.

Voici, par exemple, une vue qui spécifie une telle transition :

ListView {
    ...
    addDisplaced: Transition {
        NumberAnimation { properties: "x,y"; duration: 1000 }
    }
}

Chaque fois qu'un élément est ajouté à la vue ci-dessus, tous les éléments situés sous le nouvel élément sont déplacés, ce qui les fait descendre (ou se déplacer latéralement, s'ils sont orientés horizontalement) au sein de la vue. Lorsque ce déplacement se produit, le mouvement des éléments vers leurs nouvelles positions x, y au sein de la vue sera animé par une transition « NumberAnimation » sur une seconde, comme spécifié. Cette transition ne s’applique pas au nouvel élément qui a été ajouté à la vue ; pour animer les éléments ajoutés, définissez la propriété « add ».

Si un élément est déplacé par plusieurs types d’opérations simultanément, il n’est pas précisé si la transition addDisplaced, moveDisplaced ou removeDisplaced sera appliquée. De plus, s’il n’est pas nécessaire de spécifier des transitions différentes selon qu’un élément est déplacé par une opération d’ajout, de déplacement ou de suppression, envisagez plutôt de définir la propriété displaced.

Pour plus de détails et d’exemples sur l’utilisation des transitions de vue, consultez la documentation relative à ` ViewTransition `.

Remarque : cette transition ne s’applique pas aux éléments créés lors du premier remplissage de la vue, ni lorsque l’ model de la vue change. Dans ces cas-là, c’est la transition « populate » qui est appliquée à la place.

Voir également displaced, add, populate et ViewTransition.

cacheBuffer : int

Cette propriété détermine si les délégués sont conservés en dehors de la zone visible de la vue.

Si cette valeur est supérieure à zéro, la vue peut conserver autant de délégués instanciés que le tampon spécifié peut en contenir. Par exemple, si dans une vue verticale, le délégué mesure 20 pixels de haut et que l’ cacheBuffer e est défini sur 40, alors jusqu’à 2 délégués au-dessus et 2 délégués en dessous de la zone visible peuvent être créés/conservés. Les délégués mis en mémoire tampon sont créés de manière asynchrone, ce qui permet la création sur plusieurs images et réduit le risque de saut d’images. Afin d’améliorer les performances de dessin, les délégués situés en dehors de la zone visible ne sont pas dessinés.

La valeur par défaut de cette propriété dépend de la plateforme, mais elle est généralement supérieure à zéro. Les valeurs négatives sont ignorées.

Notez que `cacheBuffer` n’est pas un tampon de pixels : il ne fait que gérer les délégués instanciés supplémentaires.

Remarque : la configuration de cette propriété ne remplace pas la création de délégués efficaces. Elle peut améliorer la fluidité du défilement au prix d’une consommation de mémoire supplémentaire. Moins un délégué contient d’objets et de liaisons, plus le défilement d’une vue est rapide. Il est important de comprendre que la configuration d’un cacheBuffer ne fait que reporter les problèmes causés par des délégués à chargement lent ; elle ne constitue pas une solution à ce scénario.

Le cacheBuffer fonctionne en dehors des marges d’affichage spécifiées par displayMarginBeginning ou displayMarginEnd.

count : int [read-only]

Cette propriété reflète le nombre d'éléments présents dans le modèle de l'ListView, qu'ils soient visibles ou instanciés en tant qu'Item s d'un composant délégué.

currentIndex : int

currentItem : Item [read-only]

La propriété ` currentIndex ` contient l'index de l'élément actuel, et ` currentItem ` contient l'élément actuel. En définissant ` currentIndex ` sur -1, vous effacerez la mise en surbrillance et mettrez ` currentItem ` à null.

Si highlightFollowsCurrentItem est égal à true, la modification de l’une ou l’autre de ces propriétés fera défiler en douceur la ListView afin que l’élément actuel devienne visible.

Notez que la position de l’élément actuel peut n’être qu’approximative jusqu’à ce qu’il devienne visible dans la vue.

Comme ` currentItem ` doit fonctionner avec n’importe quel délégué, son type est ` Item`. Souvent, un ` ListView ` est toutefois utilisé avec un seul et même type de délégué. Dans ce cas, le transtypage de ` currentItem ` vers le type du délégué peut faciliter le développement et permettre d’obtenir un code plus efficace :

component Message : Item {
    required property string sender
    required property string text
}
ListView {
    id: messageView
    delegate: Message {}
    model: messageModel
}
Button {
    text: "Reply to %1".arg((messageView.currentItem) as Message).sender
}

currentSection : string [read-only]

Cette propriété contient la section qui se trouve actuellement au début de la vue.

delegate : Component

Le délégué fournit un modèle définissant chaque élément instancié par la vue. L'index est accessible via la propriété ` index `. Les propriétés du modèle sont également disponibles, en fonction du type de modèle de données.

Le nombre d’objets et de liaisons dans le délégué a un impact direct sur les performances de défilement rapide de la vue. Dans la mesure du possible, placez les fonctionnalités qui ne sont pas nécessaires à l’affichage normal du délégué dans un ` Loader ` capable de charger des composants supplémentaires en cas de besoin.

L’ ListView organisera la disposition des éléments en fonction de la taille de l’élément racine du délégué.

Il est recommandé que la taille du délégué soit un nombre entier afin d’éviter un alignement des éléments au niveau des sous-pixels.

L’ stacking order par défaut des instances de délégué est 1.

Remarque : les délégués sont instanciés selon les besoins et peuvent être détruits à tout moment. Ils sont rattachés à ` contentItem` de ` ListView`, et non à la vue elle-même. L’état ne doit jamais être stocké dans un délégué.

Voir également Stacking Order in ListView.

delegateModelAccess : enumeration [since 6.10]

Cette propriété détermine la manière dont les délégués peuvent accéder au modèle.

ConstanteDescription
DelegateModel.ReadOnlyInterdit aux délégués d'écrire dans le modèle via les propriétés de contexte, l'objet ` model ` ou les propriétés obligatoires.
DelegateModel.ReadWriteAutorise les délégués à modifier le modèle via les propriétés de contexte, l'objet ` model ` ou les propriétés obligatoires.
DelegateModel.Qt5ReadWriteAutorise les délégués à modifier le modèle via l'objet ` model ` et les propriétés de contexte, mais pas via les propriétés obligatoires.

La valeur par défaut est ` DelegateModel.Qt5ReadWrite`.

Cette propriété a été introduite dans Qt 6.10.

Voir également Modèles et vues dans Qt Quick#Modification des données du modèle.

displaced : Transition

Cette propriété contient la transition générique à appliquer aux éléments qui ont été déplacés par une opération du modèle affectant la vue.

Cela permet de spécifier facilement la transition générique à appliquer à tous les éléments déplacés par une opération d’ajout, de déplacement ou de suppression, sans avoir à définir individuellement les propriétés addDisplaced, moveDisplaced et removeDisplaced. Voici, par exemple, une vue qui spécifie une transition de déplacement :

ListView {
    ...
    displaced: Transition {
        NumberAnimation { properties: "x,y"; duration: 1000 }
    }
}

Lorsqu’un élément est ajouté, déplacé ou supprimé au sein de la vue ci-dessus, les éléments situés en dessous sont déplacés, ce qui les fait descendre (ou se déplacer latéralement, s’ils sont orientés horizontalement) dans la vue. Au fur et à mesure de ce déplacement, le mouvement des éléments vers leurs nouvelles positions x, y au sein de la vue sera animé par une transition de type « NumberAnimation » sur une durée d’une seconde, comme spécifié.

Si une vue spécifie cette transition de décalage générique ainsi qu’une transition spécifique de type « addDisplaced », « moveDisplaced » ou « removeDisplaced », la transition la plus spécifique sera utilisée à la place de la transition de décalage générique lorsque l’opération concernée se produit, à condition que la transition la plus spécifique n’ait pas été désactivée (en définissant enabled sur false). Si elle a effectivement été désactivée, c’est la transition de décalage générique qui est appliquée à la place.

Pour plus de détails et d’exemples sur l’utilisation des transitions de vue, consultez la documentation ViewTransition.

Voir également addDisplaced, moveDisplaced, removeDisplaced et ViewTransition.

displayMarginBeginning : int [since QtQuick 2.3]

displayMarginEnd : int [since QtQuick 2.3]

Cette propriété permet d'afficher les délégués en dehors de la géométrie de la vue.

Si cette valeur est différente de zéro, la vue créera des délégués supplémentaires avant le début de la vue ou après sa fin. La vue créera autant de délégués que la taille en pixels spécifiée le permet.

Par exemple, si, dans une vue verticale, le délégué mesure 20 pixels de haut et que les paramètres « displayMarginBeginning » et « displayMarginEnd » sont tous deux définis sur 40, alors 2 délégués au-dessus et 2 délégués en dessous seront créés et affichés.

La valeur par défaut est 0.

Cette propriété est destinée à permettre certaines configurations de l’interface utilisateur, et non à optimiser les performances. Si vous souhaitez créer des délégués en dehors de la géométrie de la vue pour des raisons de performances, vous devriez plutôt utiliser la propriété ` cacheBuffer `.

Ces propriétés ont été introduites dans QtQuick 2.3.

effectiveLayoutDirection : enumeration [read-only]

Cette propriété définit le sens de mise en page effectif d'une liste orientée horizontalement.

Lorsque vous utilisez la propriété associée « LayoutMirroring::enabled » pour les mises en page locales, le sens visuel de la mise en page de la liste horizontale sera inversé. Cependant, la propriété « layoutDirection » restera inchangée.

Voir également ListView::layoutDirection et LayoutMirroring.

Cette propriété contient le composant à utiliser comme pied de page.

Une instance du composant de pied de page est créée pour chaque vue. Le pied de page est positionné à la fin de la vue, après tous les éléments. L'stacking order par défaut du pied de page est 1.

Voir également header, footerItem et Stacking Order in ListView.

footerItem : Item [read-only]

Cet élément contient le pied de page généré à partir du composant footer.

Une instance du composant de pied de page est créée pour chaque vue. Le pied de page est positionné à la fin de la vue, après tous les autres éléments. L'stacking order par défaut du pied de page est 1.

Voir également footer, headerItem et Stacking Order in ListView.

footerPositioning : enumeration [since Qt 5.4]

Cette propriété détermine le positionnement de l'footer item.

ConstanteDescription
ListView.InlineFooter(par défaut) Le pied de page est positionné à la fin du contenu et se déplace avec celui-ci comme un élément ordinaire.
ListView.OverlayFooterLe pied de page est positionné à la fin de la vue.
ListView.PullBackFooterLe pied de page est positionné à la fin de la vue. Le pied de page peut être repoussé en déplaçant le contenu vers l’arrière, et ramené en déplaçant le contenu vers l’avant.

Remarque : cette propriété n’a aucun effet sur l’ stacking order du pied de page. Par exemple, si le pied de page doit s’afficher au-dessus des éléments de l’ delegate lors de l’utilisation de ListView.OverlayFooter, sa valeur Z doit être définie sur une valeur supérieure à celle des délégués. Pour plus d’informations, consultez Stacking Order in ListView.

Remarque : si footerPositioning n’est pas défini sur ListView.InlineFooter, l’utilisateur ne peut pas appuyer sur la liste ni la faire défiler depuis le pied de page. Dans tous les cas, le footer item peut contenir des éléments ou des gestionnaires d’événements qui assurent une gestion personnalisée des entrées souris ou tactiles.

Cette propriété a été introduite dans Qt 5.4.

header : Component

Cette propriété contient le composant à utiliser comme en-tête.

Une instance du composant d'en-tête est créée pour chaque vue. L'en-tête est positionné au début de la vue, avant tout autre élément. L'stacking order par défaut de l'en-tête est 1.

Voir également footer, headerItem et Stacking Order in ListView.

headerItem : Item [read-only]

Cet élément contient l'élément d'en-tête créé à partir du composant header.

Une instance du composant d'en-tête est créée pour chaque vue. L'en-tête est positionné au début de la vue, avant tout autre élément. L'stacking order par défaut de l'en-tête est 1.

Voir également header, footerItem et Stacking Order in ListView.

headerPositioning : enumeration [since Qt 5.4]

Cette propriété détermine le positionnement de l'header item.

ConstanteDescription
ListView.InlineHeader(par défaut) L'en-tête est positionné au début du contenu et se déplace avec celui-ci comme un élément ordinaire.
ListView.OverlayHeaderL'en-tête est positionné au début de la vue.
ListView.PullBackHeaderL’en-tête est positionné au début de la vue. L’en-tête peut être repoussé en faisant avancer le contenu, et ramené en faisant reculer le contenu.

Remarque : cette propriété n’a aucun effet sur l’ stacking order. Par exemple, si l’en-tête doit s’afficher au-dessus des éléments de l’ delegate lors de l’utilisation d’ ListView.OverlayHeader, sa valeur Z doit être définie sur une valeur supérieure à celle des délégués. Pour plus d’informations, consultez Stacking Order in ListView.

Remarque : si headerPositioning n’est pas défini sur ListView.InlineHeader, l’utilisateur ne peut pas appuyer sur l’en-tête ni faire défiler la liste à partir de celui-ci. Dans tous les cas, le header item peut contenir des éléments ou des gestionnaires d’événements qui assurent une gestion personnalisée des entrées souris ou tactiles.

Cette propriété a été introduite dans Qt 5.4.

highlight : Component

Cette propriété contient le composant à utiliser comme mise en évidence.

Une instance du composant de mise en évidence est créée pour chaque liste. La géométrie de l'instance de composant résultante est gérée par la liste de manière à rester associée à l'élément actuel, sauf si la propriété ` highlightFollowsCurrentItem ` est définie sur `false`. L'stacking order e par défaut de l'élément de mise en évidence est ` 0`.

Voir également highlightItem, highlightFollowsCurrentItem, Exemple de mise en surbrillance dans ListView et Stacking Order in ListView.

highlightFollowsCurrentItem : bool

Cette propriété indique si la mise en surbrillance est gérée par la vue.

Si cette propriété est définie sur true (valeur par défaut), la surbrillance se déplace en douceur pour suivre l'élément actuel. Dans le cas contraire, la surbrillance n'est pas déplacée par la vue, et tout déplacement doit être implémenté par la surbrillance elle-même.

Voici un surlignage dont le mouvement est défini par un élément « SpringAnimation » :

Component {
    id: highlight
    Rectangle {
        width: 180; height: 40
        color: "lightsteelblue"; radius: 5
        y: list.currentItem.y
        Behavior on y {
            SpringAnimation {
                spring: 3
                damping: 0.2
            }
        }
    }
}

ListView {
    id: list
    width: 180; height: 200
    model: ContactModel {}
    delegate: Text { text: name }

    highlight: highlight
    highlightFollowsCurrentItem: false
    focus: true
}

Notez que l’animation du surlignage affecte également la manière dont la vue défile. En effet, la vue se déplace pour maintenir le surlignage dans la plage de surlignage préférée (ou la fenêtre d’affichage visible).

Voir également highlight et highlightMoveVelocity.

highlightItem : Item [read-only]

Cet élément contient l'élément mis en évidence créé à partir du composant « highlight ».

La gestion de l'highlightItem est assurée par la vue, sauf si la propriété highlightFollowsCurrentItem est définie sur false. L'stacking order par défaut de l'élément mis en évidence est 0.

Voir également highlight, highlightFollowsCurrentItem et Stacking Order in ListView.

highlightMoveDuration : int

highlightMoveVelocity : real

highlightResizeDuration : int

highlightResizeVelocity : real

Ces propriétés contrôlent la vitesse des animations de déplacement et de redimensionnement pour le délégué de mise en évidence.

highlightFollowsCurrentItem La valeur doit être « true » pour que ces propriétés prennent effet.

La valeur par défaut des propriétés de vitesse est de 400 pixels/seconde. La valeur par défaut des propriétés de durée est -1, c'est-à-dire que la mise en surbrillance prendra autant de temps que nécessaire pour se déplacer à la vitesse définie.

Ces propriétés présentent les mêmes caractéristiques qu’une animation « SmoothedAnimation » : si la vitesse et la durée sont toutes deux définies, l’animation utilisera celle qui donne la durée la plus courte.

Les propriétés de vitesse et de durée de déplacement sont utilisées pour contrôler le mouvement résultant des changements d’index ; par exemple, lorsque la méthode ` incrementCurrentIndex()` est appelée. Lorsque l’utilisateur effectue un balayage sur un ` ListView`, c’est la vitesse issue de ce balayage qui est utilisée pour contrôler le mouvement.

Pour ne définir qu’une seule propriété, l’autre peut être définie sur ` -1`. Par exemple, si vous souhaitez uniquement animer la durée et non la vitesse, utilisez le code suivant :

highlightMoveDuration: 1000
highlightMoveVelocity: -1

Voir également highlightFollowsCurrentItem.

highlightRangeMode : enumeration

preferredHighlightBegin : real

preferredHighlightEnd : real

Ces propriétés définissent la plage souhaitée de mise en surbrillance (pour l'élément actuel) au sein de la vue. La valeur « preferredHighlightBegin » doit être inférieure à la valeur « preferredHighlightEnd ».

Ces propriétés influent sur la position de l’élément actif lors du défilement de la liste. Par exemple, si l’élément actuellement sélectionné doit rester au milieu de la liste lors du défilement de la vue, définissez les valeurs preferredHighlightBegin et preferredHighlightEnd sur les coordonnées supérieure et inférieure de l’emplacement où se trouverait l’élément central. Si l'index de l'élément actif ( currentItem ) est modifié par programmation, la liste se fera automatiquement défiler de manière à ce que l'élément actif se trouve au milieu de la vue. De plus, ce comportement de l'index de l'élément actif s'appliquera qu'il y ait ou non une mise en surbrillance.

Les valeurs valides pour ` highlightRangeMode ` sont :

ConstanteDescription
ListView.ApplyRangela vue tente de maintenir le surlignage dans la plage définie. Cependant, le surlignage peut sortir de cette plage aux extrémités de la liste ou à la suite d’une interaction avec la souris.
ListView.StrictlyEnforceRangeLa surbrillance ne sort jamais de la plage. L’élément actuel change si une action au clavier ou à la souris entraîne le déplacement de la surbrillance hors de la plage.
ListView.NoHighlightRangeIl s'agit de la valeur par défaut.

keyNavigationEnabled : bool

Cette propriété indique si la navigation à l'aide des touches du clavier est activée dans la liste.

Si cette propriété est définie sur « true », l'utilisateur peut naviguer dans la vue à l'aide du clavier. Elle est utile pour les applications qui doivent activer ou désactiver de manière sélective les interactions avec la souris et le clavier.

Par défaut, la valeur de cette propriété est liée à « interactive » afin de garantir la compatibilité du comportement avec les applications existantes. Lorsqu’elle est définie explicitement, elle cesse d’être liée à la propriété « interactive ».

Voir également interactive.

keyNavigationWraps : bool

Cette propriété indique si la navigation à l'aide des touches de direction effectue un retour en début de liste.

Si cette propriété est définie sur « true », la navigation au clavier qui ferait passer la sélection de l'élément actuel au-delà de la fin de la liste effectue un retour en début de liste et place la sélection au début de celle-ci, et inversement.

Par défaut, la navigation au clavier ne boucle pas.

layoutDirection : enumeration

Cette propriété définit le sens de mise en page d'une liste orientée horizontalement.

Valeurs possibles :

ConstanteDescription
Qt.LeftToRight(par défaut) Les éléments seront disposés de gauche à droite.
Qt.RightToLeftLes éléments seront disposés de droite à gauche.

La définition de cette propriété n'a aucun effet si la propriété « orientation » est définie sur «Qt.Vertical».

Voir également « ListView::effectiveLayoutDirection » et « ListView::verticalLayoutDirection ».

model : model

Cette propriété contient le modèle fournissant les données de la liste.

Le modèle fournit l'ensemble des données utilisées pour créer les éléments de la vue. Les modèles peuvent être créés directement en QML à l'aide de ` ListModel` et ` ObjectModel`, ou fournis par des classes de modèle C++. Si une classe de modèle C++ est utilisée, elle doit être une sous-classe de ` QAbstractItemModel ` ou une simple liste.

Voir également Modèles de données.

move : Transition

Cette propriété définit la transition à appliquer aux éléments de la vue qui sont déplacés à la suite d'une opération de déplacement dans l'model de la vue.

Par exemple, voici une vue qui spécifie une telle transition :

ListView {
    ...
    move: Transition {
        NumberAnimation { properties: "x,y"; duration: 1000 }
    }
}

Chaque fois que l’ model effectue une opération de déplacement visant à déplacer un ensemble particulier d’index, les éléments correspondants de la vue seront animés vers leurs nouvelles positions dans la vue en l’espace d’une seconde. La transition ne s’applique qu’aux éléments faisant l’objet de l’opération de déplacement dans le modèle ; elle ne s’applique pas aux éléments situés en dessous d’eux et déplacés par cette opération. Pour animer les éléments déplacés, définissez les propriétés « displaced » ou « moveDisplaced ».

Pour plus de détails et d’exemples sur l’utilisation des transitions de vue, consultez la documentation ViewTransition.

Voir également moveDisplaced et ViewTransition.

moveDisplaced : Transition

Cette propriété définit la transition à appliquer aux éléments déplacés par une opération de déplacement dans l'model de la vue.

Par exemple, voici une vue qui spécifie une telle transition :

ListView {
    ...
    moveDisplaced: Transition {
        NumberAnimation { properties: "x,y"; duration: 1000 }
    }
}

Chaque fois que l’ model effectue une opération de déplacement pour déplacer un ensemble particulier d’index, les éléments situés entre les index source et de destination de l’opération de déplacement sont déplacés, ce qui les fait se déplacer vers le haut ou vers le bas (ou latéralement, s’ils sont orientés horizontalement) au sein de la vue. Lorsque ce déplacement se produit, le mouvement des éléments vers leurs nouvelles positions x, y au sein de la vue sera animé par une transition « NumberAnimation » sur une seconde, comme spécifié. Cette transition ne s’applique pas aux éléments qui sont les véritables objets de l’opération de déplacement ; pour animer les éléments déplacés, définissez la propriété « move ».

Si un élément est déplacé par plusieurs types d’opérations simultanément, il n’est pas précisé si la transition « addDisplaced », « moveDisplaced » ou « removeDisplaced » sera appliquée. De plus, s’il n’est pas nécessaire de spécifier des transitions différentes selon qu’un élément est déplacé par une opération d’ajout, de déplacement ou de suppression, envisagez plutôt de définir la propriété « displaced ».

Pour plus de détails et d’exemples sur l’utilisation des transitions de vue, consultez la documentation relative à ` ViewTransition `.

Voir également displaced, move et ViewTransition.

orientation : enumeration

Cette propriété définit l'orientation de la liste.

Valeurs possibles :

ConstanteDescription
ListView.HorizontalLes éléments sont disposés horizontalement
Trois fiches de contact disposées horizontalement : Bill Smith, John Brown, Sam Wise
ListView.Vertical(par défaut) Les éléments sont disposés verticalement
Trois fiches de contact empilées verticalement : Bill Smith, John Brown, Sam Wise

Voir aussi Flickable Direction.

populate : Transition

Cette propriété définit la transition à appliquer aux éléments créés initialement pour une vue.

Elle s'applique à tous les éléments créés lorsque :

  • La vue est créée pour la première fois
  • l'model de la vue change de telle sorte que les délégués visibles sont entièrement remplacés
  • L'model de la vue est de type « reset », si le modèle est une sous-classe de ` QAbstractItemModel `

Voici, par exemple, une vue qui spécifie une telle transition :

ListView {
    ...
    populate: Transition {
        NumberAnimation { properties: "x,y"; duration: 1000 }
    }
}

Lors de son initialisation, la vue créera tous les éléments nécessaires, puis les animera pour les placer à leur position correcte au sein de la vue en l’espace d’une seconde.

Cependant, lorsque l’on fait défiler la vue par la suite, la transition « populate » ne s’exécute pas, même si les délégués sont instanciés au fur et à mesure qu’ils deviennent visibles. Lorsque le modèle change de telle sorte que de nouveaux délégués deviennent visibles, c’est la transition « add » qui s’exécute. Vous ne devez donc pas compter sur la transition « populate » pour initialiser les propriétés du délégué, car elle ne s’applique pas à tous les délégués. Si votre animation définit la valeur to d’une propriété, celle-ci doit initialement avoir la valeur to, et l’animation doit définir la valeur from au cas où elle ferait l’objet d’une animation :

ListView {
    ...
    delegate: Rectangle {
        opacity: 1 // not necessary because it's the default
    }
    populate: Transition {
        NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 1000 }
    }
}

Pour plus de détails et d’exemples sur l’utilisation des transitions de vue, consultez la documentation ViewTransition.

Voir également add et ViewTransition.

remove : Transition

Cette propriété définit la transition à appliquer aux éléments supprimés de la vue.

Voici, par exemple, une vue qui spécifie une telle transition :

ListView {
    ...
    remove: Transition {
        ParallelAnimation {
            NumberAnimation { property: "opacity"; to: 0; duration: 1000 }
            NumberAnimation { properties: "x,y"; to: 100; duration: 1000 }
        }
    }
}

Chaque fois qu'un élément est supprimé de la vue ci-dessus, celui-ci est animé vers la position (100,100) en une seconde, et, parallèlement, son opacité passe à 0. La transition s'applique uniquement aux éléments supprimés de la vue ; elle ne s'applique pas aux éléments situés en dessous qui sont déplacés par la suppression des éléments. Pour animer les éléments déplacés, définissez les propriétés « displaced » ou « removeDisplaced ».

Notez qu’au moment où la transition est appliquée, l’élément a déjà été supprimé du modèle ; toute référence aux données du modèle correspondant à l’index supprimé ne sera plus valide.

De plus, si la propriété attachée ` delayRemove ` a été définie pour un élément délégué, la transition de suppression ne sera pas appliquée tant que ` delayRemove ` ne sera pas redevenu `false`.

Pour plus de détails et d’exemples sur l’utilisation des transitions de vue, consultez la documentation relative à « ViewTransition ».

Voir également removeDisplaced et ViewTransition.

removeDisplaced : Transition

Cette propriété définit la transition à appliquer aux éléments de la vue qui sont déplacés à la suite de la suppression d'autres éléments de la vue.

Par exemple, voici une vue qui spécifie une telle transition :

ListView {
    ...
    removeDisplaced: Transition {
        NumberAnimation { properties: "x,y"; duration: 1000 }
    }
}

Chaque fois qu’un élément est supprimé de la vue ci-dessus, tous les éléments situés en dessous sont déplacés, ce qui les fait remonter (ou se déplacer latéralement, s’ils sont orientés horizontalement) au sein de la vue. Lorsque ce déplacement se produit, le mouvement des éléments vers leurs nouvelles positions x, y au sein de la vue sera animé par une transition de type « NumberAnimation » sur une durée d’une seconde, comme spécifié. Cette transition ne s’applique pas à l’élément qui a effectivement été supprimé de la vue ; pour animer les éléments supprimés, définissez la propriété « remove ».

Si un élément est déplacé par plusieurs types d’opérations simultanément, il n’est pas précisé si la transition « addDisplaced », « moveDisplaced » ou « removeDisplaced » sera appliquée. De plus, s’il n’est pas nécessaire de spécifier des transitions différentes selon qu’un élément est déplacé par une opération d’ajout, de déplacement ou de suppression, envisagez plutôt de définir la propriété « displaced ».

Pour plus de détails et d’exemples sur l’utilisation des transitions de vue, consultez la documentation relative à ViewTransition.

Voir également displaced, remove et ViewTransition.

reuseItems : bool

Cette propriété vous permet de réutiliser les éléments instanciés à partir de la classe ` delegate`. Si elle est définie sur ` false`, tous les éléments actuellement mis en pool sont détruits.

Par défaut, cette propriété est définie sur ` false `.

Voir également Reusing items, pooled() et reused().

section group

section.criteria : enumeration

section.delegate : Component

section.labelPositioning : enumeration

section.property : string

Ces propriétés déterminent l'expression à évaluer et l'apparence des libellés de section.

section.property Contient le nom de la propriété qui sert de base à chaque section.

section.criteria contient les critères de formation de chaque section, basés sur section.property. Cette valeur peut être l'une des suivantes :

ConstanteDescription
ViewSection.FullString(par défaut) : les sections sont créées en fonction de la valeur de « section.property ».
ViewSection.FirstCharacterles sections sont créées en fonction du premier caractère de la valeur « section.property » (par exemple, les sections « A », « B », « C »… pour un carnet d’adresses).

Une comparaison insensible à la casse est utilisée pour déterminer les limites des sections.

section.delegate Contient le composant délégué pour chaque section. L’ stacking order par défaut des instances de délégué de section est 2. Si vous y déclarez une propriété de type required nommée « section », cette propriété contiendra le titre de la section.

section.labelPositioning détermine si les libellés de la section actuelle et/ou suivante sont alignés au début ou à la fin de la vue, et si ces libellés s’affichent en ligne. Cette valeur peut être une combinaison des éléments suivants :

ConstanteDescription
ViewSection.InlineLabels(par défaut) les libellés de section s’affichent en ligne entre les délégués d’éléments séparant les sections.
ViewSection.CurrentLabelAtStartl'étiquette de la section actuelle reste collée au début de la vue lorsqu'elle est déplacée.
ViewSection.NextLabelAtEndL'étiquette de la section suivante (au-delà de toutes les sections visibles) reste collée à la fin de la vue lorsque celle-ci est déplacée.

Remarque : l’activation de l’option « ViewSection.NextLabelAtEnd » (Afficher l’étiquette de la section suivante) nécessite que la vue analyse à l’avance la section suivante, ce qui a des implications en termes de performances, en particulier pour les modèles plus lents.

Chaque élément de la liste possède des propriétés associées nommées ` ListView.section`, ` ListView.previousSection ` et ` ListView.nextSection`.

Par exemple, voici un « ListView » qui affiche une liste d’animaux, répartis en sections. Chaque élément de la liste « ListView » est placé dans une section différente en fonction de la propriété « size » de l’élément du modèle. Le composant délégué « sectionHeading » fournit la barre bleu clair qui marque le début de chaque section.

    // The delegate for each section header
    Component {
        id: sectionHeading
        Rectangle {
            width: ListView.view.width
            height: childrenRect.height
            color: "lightsteelblue"

            required property string section

            Text {
                text: parent.section
                font.bold: true
                font.pixelSize: 20
            }
        }
    }

    ListView {
        id: view
        anchors.top: parent.top
        anchors.bottom: buttonBar.top
        width: parent.width
        model: animalsModel
        delegate: Text {
            required property string name

            text: name
            font.pixelSize: 18
        }

        section.property: "size"
        section.criteria: ViewSection.FullString
        section.delegate: sectionHeading
    }

ListView avec des éléments regroupés en sections, dotées de barres d'en-tête bleu clair

Remarque : l’ajout de sections à une ListView ne réorganise pas automatiquement les éléments de la liste selon les critères de section. Si le modèle n’est pas trié par section, il est possible que les sections créées ne soient pas uniques ; chaque limite entre des sections différentes entraînera la création d’un en-tête de section, même si cette section existe déjà ailleurs.

Voir également les exemples de ListView et d’ Stacking Order in ListView.

snapMode : enumeration

Cette propriété détermine la manière dont le défilement de la vue se stabilise après un glissement ou un balayage. Les valeurs possibles sont :

ConstanteDescription
ListView.NoSnap(par défaut) la vue s'arrête n'importe où dans la zone visible.
ListView.SnapToItemla vue s'arrête avec un élément aligné sur le début de la vue.
ListView.SnapOneItemla vue s'arrête à une distance maximale d'un élément par rapport au premier élément visible au moment où le bouton de la souris est relâché. Ce mode est particulièrement utile pour se déplacer d'une page à la fois. Lorsque SnapOneItem est activé, l’ ListView e affiche une affinité plus forte avec les éléments voisins lors d’un déplacement. Par exemple, un glissement court qui revient à l’élément actuel avec SnapToItem peut s’aligner sur un élément voisin avec SnapOneItem.

snapMode n’affecte pas l’ currentIndex. Pour mettre à jour l’ currentIndex au fur et à mesure que la liste est déplacée, définissez highlightRangeMode sur ListView.StrictlyEnforceRange.

Voir également highlightRangeMode.

spacing : real

Cette propriété définit l'espacement entre les éléments.

La valeur par défaut est 0.

verticalLayoutDirection : enumeration

Cette propriété définit le sens de mise en page d'une liste orientée verticalement.

Valeurs possibles :

ConstanteDescription
ListView.TopToBottom(par défaut) Les éléments sont disposés du haut vers le bas de la vue.
ListView.BottomToTopLes éléments sont disposés du bas de la vue vers le haut de la vue.

La définition de cette propriété n'a aucun effet si la propriété « orientation » est définie sur Qt.Horizontal.

Voir aussi ListView::layoutDirection.

Documentation sur les propriétés associées

ListView.delayRemove : bool [attached]

Cette propriété associée indique si le délégué peut être détruit. Elle est associée à chaque instance du délégué. La valeur par défaut est « false ».

Il est parfois nécessaire de retarder la destruction d'un élément jusqu’à la fin d’une animation. L’exemple de délégué ci-dessous garantit que l’animation se termine avant que l’élément ne soit supprimé de la liste.

Component {
    id: delegate
    Item {
        SequentialAnimation {
            id: removeAnimation
            PropertyAction { target: wrapper; property: "ListView.delayRemove"; value: true }
            NumberAnimation { target: wrapper; property: "scale"; to: 0; duration: 250; easing.type: Easing.InOutQuad }
            PropertyAction { target: wrapper; property: "ListView.delayRemove"; value: false }
        }
        ListView.onRemove: removeAnimation.start()
    }
}

Si une transition de type « remove » a été spécifiée, elle ne sera appliquée qu’une fois que la méthode `delayRemove` aura renvoyé la valeur ` false`.

ListView.isCurrentItem : bool [read-only attached]

Cette propriété associée renvoie « true » si ce délégué correspond à l'élément actuel ; sinon, elle renvoie « false ».

Elle est associée à chaque instance du délégué.

Cette propriété peut être utilisée pour modifier l'apparence de l'élément actuel, par exemple :

ListView {
    width: 180; height: 200

    Component {
        id: contactsDelegate
        Rectangle {
            id: wrapper
            width: 180
            height: contactInfo.height
            color: ListView.isCurrentItem ? "black" : "red"
            Text {
                id: contactInfo
                text: name + ": " + number
                color: wrapper.ListView.isCurrentItem ? "red" : "black"
            }
        }
    }

    model: ContactModel {}
    delegate: contactsDelegate
    focus: true
}

ListView.nextSection : string [read-only attached]

Cette propriété associée contient la section de l'élément suivant.

Elle est associée à chaque instance du délégué.

La section est évaluée à l'aide des propriétés section.

ListView.previousSection : string [read-only attached]

Cette propriété associée contient la section de l'élément précédent.

Elle est associée à chaque instance du délégué.

La section est évaluée à l'aide des propriétés « section ».

ListView.section : string [read-only attached]

Cette propriété associée contient la section de cet élément.

Elle est associée à chaque instance du délégué.

La section est évaluée à l'aide des propriétés « section ».

ListView.view : ListView [read-only attached]

Cette propriété associée contient la vue qui gère cette instance de délégué.

Elle est associée à chaque instance du délégué, ainsi qu'aux délégués « header », « footer », « section » et « highlight ».

Documentation sur le signal attaché

[attached] add()

Ce signal associé est émis immédiatement après l'ajout d'un élément à la vue.

Si une transition d'ajout est spécifiée, elle est appliquée immédiatement après le traitement de ce signal.

Remarque : le gestionnaire correspondant est onAdd.

[attached] pooled()

Ce signal est émis lorsqu'un élément a été ajouté au pool de réutilisation. Vous pouvez l'utiliser pour suspendre les minuteurs ou les animations en cours au sein de l'élément, ou pour libérer les ressources qui ne peuvent pas être réutilisées.

Ce signal n'est émis que si la propriété ` reuseItems ` est définie sur ` true`.

Remarque : le gestionnaire correspondant est onPooled.

Voir également Reusing items, reuseItems et reused().

[attached] remove()

Ce signal est émis juste avant qu'un élément ne soit supprimé de la vue.

Si une transition de suppression a été spécifiée, elle est appliquée après le traitement de ce signal, à condition que la valeur de « delayRemove » soit fausse.

Remarque : le gestionnaire correspondant est onRemove.

[attached] reused()

Ce signal est émis après la réutilisation d'un élément. À ce stade, l'élément a été retiré du pool et placé dans la vue de contenu, et les propriétés du modèle telles que ` index ` et ` row ` ont été mises à jour.

Les autres propriétés qui ne sont pas fournies par le modèle ne changent pas lorsqu'un élément est réutilisé. Vous devez éviter de stocker tout état à l'intérieur d'un délégué, mais si vous le faites, réinitialisez manuellement cet état à la réception de ce signal.

Ce signal est émis lorsque l’élément est réutilisé, et non lors de sa première création.

Ce signal n'est émis que si la propriété « reuseItems » est définie sur « true ».

Remarque : le gestionnaire correspondant est onReused.

Voir également Reusing items, reuseItems et pooled().

Documentation de la méthode

void decrementCurrentIndex()

Décrémente l'index actuel. L'index actuel revient au début si la propriété « keyNavigationWraps » est définie sur « true » et qu'il se trouve actuellement au début. Cette méthode n'a aucun effet si la propriété « count » est égale à zéro.

Remarque: les méthodes ne doivent être appelées qu'une fois que le composant a terminé son exécution.

void forceLayout()

La mise à jour en fonction des modifications apportées au modèle est généralement traitée par lots, de sorte qu'elle n'a lieu qu'une seule fois par image. Cela signifie qu'au sein des blocs de script, il est possible que le modèle sous-jacent ait changé, mais que l'ListView n'ait pas encore pris en compte ces modifications.

Cette méthode force l'ListView à réagir immédiatement à tout changement en attente dans le modèle.

Remarque: les méthodes ne doivent être appelées qu’une fois que le composant a terminé son exécution.

void incrementCurrentIndex()

Incrémente l'index actuel. L'index actuel revient au début si la propriété « keyNavigationWraps » est définie sur « true » et qu'il se trouve actuellement à la fin. Cette méthode n'a aucun effet si la propriété « count » est égale à zéro.

Remarque: les méthodes ne doivent être appelées qu’une fois que le composant a terminé son exécution.

int indexAt(real x, real y)

Renvoie l'index de l'élément visible contenant le point x, y en coordonnées de contenu. S'il n'y a pas d'élément à l'emplacement spécifié, ou si l'élément n'est pas visible, la fonction renvoie -1.

Si l’élément se trouve en dehors de la zone visible, la valeur -1 est renvoyée, que cet élément soit ou non présent à cet emplacement une fois affiché à la suite d’un défilement.

Remarque: ces méthodes ne doivent être appelées qu’une fois le composant initialisé.

Item itemAt(real x, real y)

Renvoie l’élément visible contenant le point x, y en coordonnées de contenu. S’il n’y a pas d’élément à l’emplacement spécifié, ou si l’élément n’est pas visible, la valeur null est renvoyée.

Si l'élément se trouve en dehors de la zone visible, la valeur null est renvoyée, que cet élément soit ou non présent à cet emplacement une fois affiché à la suite d’un défilement.

Remarque: ces méthodes ne doivent être appelées qu’une fois le composant initialisé.

Item itemAtIndex(int index)

Renvoie l'élément correspondant à l'index. S'il n'existe aucun élément pour cet index, par exemple parce qu'il n'a pas encore été créé, ou parce qu'il est sorti de la zone visible et a été supprimé du cache, la valeur null est renvoyée.

Remarque: cette méthode ne doit être appelée qu’une fois que le composant a terminé son exécution. La valeur renvoyée ne doit pas non plus être stockée, car elle peut devenir null dès que le contrôle sort de la portée d’appel, si la vue libère cet élément.

void positionViewAtBeginning()

void positionViewAtEnd()

Positionne la vue au début ou à la fin, en tenant compte d'un éventuel en-tête ou pied de page.

Il n’est pas recommandé d’utiliser ` contentX ` ou ` contentY ` pour positionner la vue à un index particulier. Cette méthode n’est pas fiable, car la suppression d’éléments au début de la liste n’entraîne pas le repositionnement de tous les autres éléments, et parce que le début réel de la vue peut varier en fonction de la taille des délégués.

Remarque: les méthodes ne doivent être appelées qu’une fois que le composant est terminé. Pour positionner la vue au démarrage, cette méthode doit être appelée par Component.onCompleted. Par exemple, pour positionner la vue à la fin au démarrage :

Component.onCompleted: positionViewAtEnd()

void positionViewAtIndex(int index, PositionMode mode)

Positionne la vue de manière à ce que l'index e se trouve à la position spécifiée par mode:

ConstanteDescription
ListView.Beginningélément de position en haut (ou à gauche pour une orientation horizontale) de la vue.
ListView.Centerposition de l'élément au centre de la vue.
ListView.EndPlace l'élément en bas (ou à droite en orientation horizontale) de la vue.
ListView.Visiblesi une partie quelconque de l'élément est visible, ne rien faire ; sinon, afficher l'élément.
ListView.ContainS'assurer que l'élément est entièrement visible. Si l'élément est plus grand que la vue, il est positionné en haut (ou à gauche en orientation horizontale) de la vue.
ListView.SnapPositionPositionner l’élément à l’adresse preferredHighlightBegin. Ce mode n’est valide que si la propriété highlightRangeMode est définie sur StrictlyEnforceRange ou si l’alignement est activé via snapMode.

Si le positionnement de la vue à l’adresse index entraînait l’affichage d’un espace vide au début ou à la fin de la vue, celle-ci sera alors positionnée à la limite.

Il n’est pas recommandé d’utiliser contentX ou contentY pour positionner la vue à un index particulier. Cette méthode n’est pas fiable, car la suppression d’éléments au début de la liste n’entraîne pas le repositionnement de tous les autres éléments, et parce que le début réel de la vue peut varier en fonction de la taille des délégués. La manière correcte d’afficher un élément est d’utiliser positionViewAtIndex.

Remarque: les méthodes ne doivent être appelées qu'une fois le composant initialisé. Pour positionner la vue au démarrage, cette méthode doit être appelée par `Component.onCompleted`. Par exemple, pour positionner la vue à la fin :

Component.onCompleted: positionViewAtIndex(count - 1, ListView.Beginning)

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.