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
- selectedIndexes : QModelIndexList
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 ¤t, const QModelIndex &previous) |
| void | currentColumnChanged(const QModelIndex ¤t, const QModelIndex &previous) |
| void | currentRowChanged(const QModelIndex ¤t, 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.
| Constante | Valeur | Description |
|---|---|---|
QItemSelectionModel::NoUpdate | 0x0000 | Aucune sélection ne sera effectuée. |
QItemSelectionModel::Clear | 0x0001 | La sélection complète sera effacée. |
QItemSelectionModel::Select | 0x0002 | Tous les index spécifiés seront sélectionnés. |
QItemSelectionModel::Deselect | 0x0004 | Tous les index spécifiés seront désélectionnés. |
QItemSelectionModel::Toggle | 0x0008 | Tous les index spécifiés seront sélectionnés ou désélectionnés en fonction de leur état actuel. |
QItemSelectionModel::Current | 0x0010 | La sélection actuelle sera mise à jour. |
QItemSelectionModel::Rows | 0x0020 | Tous les index seront étendus pour couvrir plusieurs lignes. |
QItemSelectionModel::Columns | 0x0040 | Tous les index seront étendus pour couvrir les colonnes. |
QItemSelectionModel::SelectCurrent | Select | Current | Une combinaison des options « Sélectionner » et « Actuelle », proposée pour plus de commodité. |
QItemSelectionModel::ToggleCurrent | Toggle | Current | Une combinaison des options « Basculer » et « Actuel », proposée pour plus de commodité. |
QItemSelectionModel::ClearAndSelect | Clear | Select | Une 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 ¤t, 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 ¤t, 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 ¤t, 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); }); 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); }); 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.