Sur cette page

QItemSelectionModel Class

La classe `QItemSelectionModel` permet de suivre les éléments sélectionnés dans une vue. En savoir plus...

En-tête : #include <QItemSelectionModel>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Hérite de : QObject

Types publics

enum SelectionFlag { NoUpdate, Clear, Select, Deselect, Toggle, …, ClearAndSelect }
flags SelectionFlags

Propriétés

Fonctions publiques

QItemSelectionModel(QAbstractItemModel *model = nullptr)
QItemSelectionModel(QAbstractItemModel *model, QObject *parent)
virtual ~QItemSelectionModel()
bool columnIntersectsSelection(int column, const QModelIndex &parent = QModelIndex()) const
QModelIndex currentIndex() const
bool hasSelection() const
bool isColumnSelected(int column, const QModelIndex &parent = QModelIndex()) const
bool isRowSelected(int row, const QModelIndex &parent = QModelIndex()) const
bool isSelected(const QModelIndex &index) const
QAbstractItemModel *model()
const QAbstractItemModel *model() const
bool rowIntersectsSelection(int row, const QModelIndex &parent = QModelIndex()) const
QModelIndexList selectedColumns(int row = 0) const
QModelIndexList selectedIndexes() const
QModelIndexList selectedRows(int column = 0) const
const QItemSelection selection() const
void setModel(QAbstractItemModel *model)

Emplacements publics

virtual void clear()
virtual void clearCurrentIndex()
void clearSelection()
virtual void reset()
virtual void select(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command)
virtual void select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)
virtual void setCurrentIndex(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)

Signaux

void currentChanged(const QModelIndex &current, const QModelIndex &previous)
void currentColumnChanged(const QModelIndex &current, const QModelIndex &previous)
void currentRowChanged(const QModelIndex &current, const QModelIndex &previous)
void modelChanged(QAbstractItemModel *model)
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)

Fonctions protégées

void emitSelectionChanged(const QItemSelection &newSelection, const QItemSelection &oldSelection)

Description détaillée

Une classe QItemSelectionModel assure le suivi des éléments sélectionnés dans une vue, ou dans plusieurs vues portant sur le même modèle. Elle assure également le suivi de l'élément actuellement sélectionné dans une vue.

La classe QItemSelectionModel fait partie des classes Modèle/Vue et s'inscrit dans le cadre modèle/vue de Qt.

Les éléments sélectionnés sont stockés à l'aide de plages. Lorsque vous souhaitez modifier les éléments sélectionnés, utilisez la méthode select() et fournissez soit un QItemSelection, soit un QModelIndex et un QItemSelectionModel::SelectionFlag.

Le `QItemSelectionModel` adopte une approche à deux niveaux pour la gestion de la sélection, en traitant à la fois les éléments sélectionnés qui ont été validés et ceux qui font partie de la sélection actuelle. Les éléments actuellement sélectionnés font partie de la sélection interactive en cours (par exemple, avec la sélection « élastique » ou les sélections à l’aide de la touche Maj du clavier).

Pour mettre à jour les éléments actuellement sélectionnés, utilisez l’opération OU binaire entre ` QItemSelectionModel::Current ` et l’un des autres ` SelectionFlags`. Si vous omettez la commande ` QItemSelectionModel::Current `, une nouvelle sélection actuelle sera créée, et la précédente sera ajoutée à la sélection globale. Toutes les fonctions opèrent sur les deux niveaux ; par exemple, ` selecteditems()` renverra des éléments provenant des deux niveaux.

Remarque : depuis la version 5.5, model, hasSelection et currentIndex sont des propriétés de méta-objets.

Voir également Programmation Modèle/Vue et QAbstractItemModel.

Documentation sur les types de membres

enum QItemSelectionModel::SelectionFlag
flags QItemSelectionModel::SelectionFlags

Cette énumération décrit la manière dont le modèle de sélection sera mis à jour.

ConstanteValeurDescription
QItemSelectionModel::NoUpdate0x0000Aucune sélection ne sera effectuée.
QItemSelectionModel::Clear0x0001La sélection complète sera effacée.
QItemSelectionModel::Select0x0002Tous les index spécifiés seront sélectionnés.
QItemSelectionModel::Deselect0x0004Tous les index spécifiés seront désélectionnés.
QItemSelectionModel::Toggle0x0008Tous les index spécifiés seront sélectionnés ou désélectionnés en fonction de leur état actuel.
QItemSelectionModel::Current0x0010La sélection actuelle sera mise à jour.
QItemSelectionModel::Rows0x0020Tous les index seront étendus pour couvrir plusieurs lignes.
QItemSelectionModel::Columns0x0040Tous les index seront étendus pour couvrir les colonnes.
QItemSelectionModel::SelectCurrentSelect | CurrentUne combinaison des options « Sélectionner » et « Actuelle », proposée pour plus de commodité.
QItemSelectionModel::ToggleCurrentToggle | CurrentUne combinaison des options « Basculer » et « Actuel », proposée pour plus de commodité.
QItemSelectionModel::ClearAndSelectClear | SelectUne combinaison de « Clear » et « Select », proposée pour plus de commodité.

Le type SelectionFlags est un typedef pour QFlags<SelectionFlag>. Il stocke une combinaison OR de valeurs SelectionFlag.

Documentation de la propriété

[read-only] selectedIndexes : QModelIndexList

Fonctions d'accès :

QModelIndexList selectedIndexes() const

Signal de notification :

void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)

Documentation des fonctions membres

[explicit] QItemSelectionModel::QItemSelectionModel(QAbstractItemModel *model = nullptr)

Crée un modèle de sélection qui s'applique à l'model s de l'élément spécifié.

[explicit] QItemSelectionModel::QItemSelectionModel(QAbstractItemModel *model, QObject *parent)

Construit un modèle de sélection qui s'applique à l'model s de l'élément spécifié à l'aide de parent.

[virtual noexcept] QItemSelectionModel::~QItemSelectionModel()

Supprime le modèle de sélection.

[virtual slot] void QItemSelectionModel::clear()

Efface le modèle de sélection. Émet les méthodes selectionChanged() et currentChanged().

[virtual slot] void QItemSelectionModel::clearCurrentIndex()

Efface l'index actuel. Émet la méthode ` currentChanged()`.

[slot] void QItemSelectionModel::clearSelection()

Efface la sélection dans le modèle de sélection. Émet la méthode ` selectionChanged()`.

[invokable] bool QItemSelectionModel::columnIntersectsSelection(int column, const QModelIndex &parent = QModelIndex()) const

Renvoie ` true ` s'il existe des éléments sélectionnés dans l'column, dont l'parent correspond à celui fourni.

Remarque : depuis Qt 5.15, l’argument par défaut de ` parent ` est un index de modèle vide.

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

[signal] void QItemSelectionModel::currentChanged(const QModelIndex &current, const QModelIndex &previous)

Ce signal est émis chaque fois que l'élément actuel change. L'index de l'élément du modèle « previous » est remplacé par l'index « current » en tant qu'élément actuel de la sélection.

Notez que ce signal ne sera pas émis lorsque le modèle d’élément est réinitialisé.

Voir également currentIndex(), setCurrentIndex() et selectionChanged().

[signal] void QItemSelectionModel::currentColumnChanged(const QModelIndex &current, const QModelIndex &previous)

Ce signal est émis si l'élément « current » change et que sa colonne diffère de celle de l'élément actuel de « previous ».

Notez que ce signal ne sera pas émis lorsque le modèle d’élément est réinitialisé.

Voir également currentChanged(), currentRowChanged(), currentIndex() et setCurrentIndex().

QModelIndex QItemSelectionModel::currentIndex() const

Renvoie l'index de l'élément du modèle correspondant à l'élément actuel, ou un index non valide s'il n'y a pas d'élément actuel.

Voir également setCurrentIndex().

[signal] void QItemSelectionModel::currentRowChanged(const QModelIndex &current, const QModelIndex &previous)

Ce signal est émis si l'élément « current » change et que sa ligne diffère de celle de l'élément actuel de « previous ».

Notez que ce signal ne sera pas émis lorsque le modèle d’élément est réinitialisé.

Voir également currentChanged(), currentColumnChanged(), currentIndex() et setCurrentIndex().

[protected] void QItemSelectionModel::emitSelectionChanged(const QItemSelection &newSelection, const QItemSelection &oldSelection)

Compare les deux sélections newSelection et oldSelection, puis affiche selectionChanged() avec les éléments désélectionnés et sélectionnés.

bool QItemSelectionModel::hasSelection() const

Renvoie « true » si le modèle de sélection contient au moins un élément sélectionné ; sinon, renvoie « false ».

[invokable] bool QItemSelectionModel::isColumnSelected(int column, const QModelIndex &parent = QModelIndex()) const

Renvoie true si tous les éléments sont sélectionnés dans l'column, avec l'parent indiquée.

Notez que cette fonction est généralement plus rapide que d’appeler ` isSelected()` sur tous les éléments d’une même colonne et que les éléments non sélectionnables sont ignorés.

Remarque : depuis Qt 5.15, l’argument par défaut de parent est un index de modèle vide.

Remarque : cette fonction peut être invoquée via le système de méta-objets et depuis le QML. Voir Q_INVOKABLE.

[invokable] bool QItemSelectionModel::isRowSelected(int row, const QModelIndex &parent = QModelIndex()) const

Renvoie ` true ` si tous les éléments sont sélectionnés dans l'row, avec l'parent` indiquée.

Notez que cette fonction est généralement plus rapide que d’appeler ` isSelected()` sur tous les éléments d’une même ligne et que les éléments non sélectionnables sont ignorés.

Remarque : depuis Qt 5.15, l’argument par défaut de parent est un index de modèle vide.

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

[invokable] bool QItemSelectionModel::isSelected(const QModelIndex &index) const

Renvoie « true » si l'élément de modèle index est sélectionné.

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

QAbstractItemModel *QItemSelectionModel::model()

Renvoie le modèle d'élément sur lequel porte le modèle de sélection.

Voir également setModel().

const QAbstractItemModel *QItemSelectionModel::model() const

Renvoie le modèle d'élément sur lequel porte le modèle de sélection.

[signal] void QItemSelectionModel::modelChanged(QAbstractItemModel *model)

Ce signal est émis lorsque la fonction « model » a été définie avec succès à l'aide de la fonction « setModel() ».

Voir également model() et setModel().

[virtual slot] void QItemSelectionModel::reset()

Efface le modèle de sélection. N'émet aucun signal.

[invokable] bool QItemSelectionModel::rowIntersectsSelection(int row, const QModelIndex &parent = QModelIndex()) const

Renvoie ` true ` s'il existe des éléments sélectionnés dans l'row, dont l'parent correspond à celui fourni.

Remarque : depuis Qt 5.15, l’argument par défaut de ` parent ` est un index de modèle vide.

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

[virtual slot] void QItemSelectionModel::select(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command)

Sélectionne l'élément selection à l'aide de l'command spécifié, puis émet selectionChanged().

Remarque : ce slot est surchargé. Pour vous connecter à ce slot :

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        itemSelectionModel, qOverload(&QItemSelectionModel::select));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        itemSelectionModel, [receiver = itemSelectionModel](const QItemSelection &selection, QItemSelectionModel::SelectionFlags command) { receiver->select(selection, command); });
Pour plus d’exemples et d’approches, consultez la section « Connexion à des slots surchargés ».

Voir également QItemSelectionModel::SelectionFlag.

[virtual slot] void QItemSelectionModel::select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)

Sélectionne l'élément de modèle index à l'aide de l'command spécifiée, puis émet selectionChanged().

Remarque : ce slot est surchargé. Pour vous connecter à ce slot :

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        itemSelectionModel, qOverload(&QItemSelectionModel::select));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        itemSelectionModel, [receiver = itemSelectionModel](const QModelIndex &index, QItemSelectionModel::SelectionFlags command) { receiver->select(index, command); });
Pour plus d’exemples et d’approches, voir la section « Connexion à des slots surchargés ».

Voir également QItemSelectionModel::SelectionFlags.

[invokable] QModelIndexList QItemSelectionModel::selectedColumns(int row = 0) const

Renvoie les indices, dans l'row on fournie, des colonnes pour lesquelles toutes les lignes sont sélectionnées.

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir ` Q_INVOKABLE`.

Voir également ` selectedIndexes()` et ` selectedRows()`.

QModelIndexList QItemSelectionModel::selectedIndexes() const

Renvoie une liste de tous les index des éléments du modèle sélectionnés. La liste ne contient pas de doublons et n'est pas triée.

Remarque : fonctiongetter pour la propriété selectedIndexes.

[invokable] QModelIndexList QItemSelectionModel::selectedRows(int column = 0) const

Renvoie les index de l'column on donnée correspondant aux lignes dont toutes les colonnes sont sélectionnées.

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

Voir également ` selectedIndexes()` et ` selectedColumns()`.

const QItemSelection QItemSelectionModel::selection() const

Renvoie les plages de sélection enregistrées dans le modèle de sélection.

[signal] void QItemSelectionModel::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)

Ce signal est émis chaque fois que la sélection change. Le changement de sélection est représenté par une sélection d'éléments de type « deselected » et une sélection d'éléments de type « selected ».

Notez que l’index actuel change indépendamment de la sélection. Notez également que ce signal n’est pas émis lorsque le modèle d’éléments est réinitialisé.

Les éléments qui restent sélectionnés mais dont l’index change ne sont pas inclus dans selected et deselected. Ainsi, ce signal peut être émis alors que selected et deselected sont vides, si seuls les indices des éléments sélectionnés changent.

Remarque : il n’est pas autorisé de modifier le modèle (par exemple en appelant setData()) depuis un slot directement connecté à ce signal. Ce signal peut être émis alors que le modèle est en cours de modification, par exemple lors de la suppression d’une ligne ou d’une colonne, ou lors d’une réinitialisation du modèle. Tenter d'effectuer des modifications supplémentaires à ces moments-là peut entraîner un comportement indéfini. En particulier, des modifications imbriquées peuvent corrompre l'état interne, comme les structures de mappage gérées par QSortFilterProxyModel.

Remarque : signalde notification pour la propriété selectedIndexes.

Voir également select() et currentChanged().

[virtual slot] void QItemSelectionModel::setCurrentIndex(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)

Définit l'élément « index » du modèle comme élément actif, puis déclenche l'événement « currentChanged() ». L'élément actif est utilisé pour la navigation au clavier et l'indication du focus ; il est indépendant des éléments sélectionnés, bien qu'un élément sélectionné puisse également être l'élément actif.

Selon l’ command spécifiée, l’ index peut également faire partie de la sélection actuelle.

Voir également currentIndex() et select().

void QItemSelectionModel::setModel(QAbstractItemModel *model)

Définit le modèle sur « model ». Le signal « modelChanged() » sera émis.

Voir également model() et modelChanged().

© 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.