QSortFilterProxyModel Class
La classe QSortFilterProxyModel permet de trier et de filtrer les données transmises entre un autre modèle et une vue. Plus d'informations...
| En-tête : | #include <QSortFilterProxyModel> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Héritages : | QAbstractProxyModel |
Types publics
(since 6.10) enum class | Direction { Rows, Columns, Both } |
| flags | Directions |
Propriétés
|
|
Fonctions publiques
| QSortFilterProxyModel(QObject *parent = nullptr) | |
| virtual | ~QSortFilterProxyModel() |
| bool | autoAcceptChildRows() const |
| QBindable<bool> | bindableAutoAcceptChildRows() |
| QBindable<bool> | bindableDynamicSortFilter() |
| QBindable<Qt::CaseSensitivity> | bindableFilterCaseSensitivity() |
| QBindable<int> | bindableFilterKeyColumn() |
| QBindable<QRegularExpression> | bindableFilterRegularExpression() |
| QBindable<int> | bindableFilterRole() |
| QBindable<bool> | bindableIsSortLocaleAware() |
| QBindable<bool> | bindableRecursiveFilteringEnabled() |
| QBindable<Qt::CaseSensitivity> | bindableSortCaseSensitivity() |
| QBindable<int> | bindableSortRole() |
| bool | dynamicSortFilter() const |
| Qt::CaseSensitivity | filterCaseSensitivity() const |
| int | filterKeyColumn() const |
| QRegularExpression | filterRegularExpression() const |
| int | filterRole() const |
| bool | isRecursiveFilteringEnabled() const |
| bool | isSortLocaleAware() const |
| void | setAutoAcceptChildRows(bool accept) |
| void | setDynamicSortFilter(bool enable) |
| void | setFilterCaseSensitivity(Qt::CaseSensitivity cs) |
| void | setFilterKeyColumn(int column) |
| void | setFilterRole(int role) |
| void | setRecursiveFilteringEnabled(bool recursive) |
| void | setSortCaseSensitivity(Qt::CaseSensitivity cs) |
| void | setSortLocaleAware(bool on) |
| void | setSortRole(int role) |
| Qt::CaseSensitivity | sortCaseSensitivity() const |
| int | sortColumn() const |
| Qt::SortOrder | sortOrder() const |
| int | sortRole() const |
Fonctions publiques réimplémentées
| virtual QModelIndex | buddy(const QModelIndex &index) const override |
| virtual bool | canFetchMore(const QModelIndex &parent) const override |
| virtual int | columnCount(const QModelIndex &parent = QModelIndex()) const override |
| virtual QVariant | data(const QModelIndex &index, int role = Qt::DisplayRole) const override |
| virtual bool | dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override |
| virtual void | fetchMore(const QModelIndex &parent) override |
| virtual Qt::ItemFlags | flags(const QModelIndex &index) const override |
| virtual bool | hasChildren(const QModelIndex &parent = QModelIndex()) const override |
| virtual QVariant | headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override |
| virtual QModelIndex | index(int row, int column, const QModelIndex &parent = QModelIndex()) const override |
| virtual bool | insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override |
| virtual bool | insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override |
| virtual QModelIndex | mapFromSource(const QModelIndex &sourceIndex) const override |
| virtual QItemSelection | mapSelectionFromSource(const QItemSelection &sourceSelection) const override |
| virtual QItemSelection | mapSelectionToSource(const QItemSelection &proxySelection) const override |
| virtual QModelIndex | mapToSource(const QModelIndex &proxyIndex) const override |
| virtual QModelIndexList | match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const override |
| virtual QMimeData * | mimeData(const QModelIndexList &indexes) const override |
| virtual QStringList | mimeTypes() const override |
| virtual QModelIndex | parent(const QModelIndex &child) const override |
| virtual bool | removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override |
| virtual bool | removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override |
| virtual int | rowCount(const QModelIndex &parent = QModelIndex()) const override |
| virtual bool | setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override |
| virtual bool | setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override |
| virtual void | setSourceModel(QAbstractItemModel *sourceModel) override |
| virtual QModelIndex | sibling(int row, int column, const QModelIndex &idx) const override |
| virtual void | sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override |
| virtual QSize | span(const QModelIndex &index) const override |
| virtual Qt::DropActions | supportedDropActions() const override |
Emplacements publics
| void | invalidate() |
| void | setFilterFixedString(const QString &pattern) |
| void | setFilterRegularExpression(const QString &pattern) |
| void | setFilterRegularExpression(const QRegularExpression ®ularExpression) |
| void | setFilterWildcard(const QString &pattern) |
Signaux
(since 6.0) void | autoAcceptChildRowsChanged(bool autoAcceptChildRows) |
| void | filterCaseSensitivityChanged(Qt::CaseSensitivity filterCaseSensitivity) |
| void | filterRoleChanged(int filterRole) |
| void | recursiveFilteringEnabledChanged(bool recursiveFilteringEnabled) |
| void | sortCaseSensitivityChanged(Qt::CaseSensitivity sortCaseSensitivity) |
| void | sortLocaleAwareChanged(bool sortLocaleAware) |
| void | sortRoleChanged(int sortRole) |
Fonctions protégées
(since 6.9) void | beginFilterChange() |
(since 6.10) void | endFilterChange(QSortFilterProxyModel::Directions directions = Direction::Both) |
| virtual bool | filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const |
| virtual bool | filterAcceptsRow(int source_row, const QModelIndex &source_parent) const |
(since 6.0, until 6.13) void | invalidateColumnsFilter() |
(until 6.13) void | invalidateFilter() |
(since 6.0, until 6.13) void | invalidateRowsFilter() |
| virtual bool | lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const |
Description détaillée
Le modèle QSortFilterProxyModel peut être utilisé pour trier des éléments, filtrer des éléments ou les deux. Le modèle transforme la structure d'un modèle source en faisant correspondre les index du modèle qu'il fournit à de nouveaux index, correspondant à des emplacements différents, que les vues peuvent utiliser. Cette approche permet de restructurer un modèle source donné en ce qui concerne les vues sans nécessiter de transformations des données sous-jacentes et sans dupliquer les données en mémoire.
Supposons que nous voulions trier et filtrer les éléments fournis par un modèle personnalisé. Le code permettant de configurer le modèle et la vue, sans tri ni filtrage, ressemblerait à ceci :
QTreeView *treeView = new QTreeView; MyItemModel *model = new MyItemModel(this); treeView->setModel(model);
Pour ajouter la prise en charge du tri et du filtrage à MyItemModel, nous devons créer un QSortFilterProxyModel, appeler setSourceModel() avec MyItemModel comme argument, et installer le QSortFilterProxyModel sur la vue :
QTreeView *treeView = new QTreeView; MyItemModel *sourceModel = new MyItemModel(this); QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this); proxyModel->setSourceModel(sourceModel); treeView->setModel(proxyModel);
À ce stade, ni le tri ni le filtrage ne sont activés ; les données originales sont affichées dans la vue. Toute modification apportée par l'intermédiaire du QSortFilterProxyModel est appliquée au modèle d'origine.
Le QSortFilterProxyModel agit comme une enveloppe pour le modèle original. Si vous devez convertir des sources QModelIndexes en index de modèles triés/filtrés ou vice versa, utilisez mapToSource(), mapFromSource(), mapSelectionToSource() et mapSelectionFromSource().
Remarque : par défaut, le modèle re-trie et re-filtre dynamiquement les données chaque fois que le modèle d'origine change. Ce comportement peut être modifié en définissant la propriété dynamicSortFilter.
Les exemples Basic Sort/Filter Model et Custom Sort/Filter Model illustrent comment utiliser QSortFilterProxyModel pour effectuer des tris et des filtrages de base et comment le sous-classer pour mettre en œuvre un comportement personnalisé.
Le tri
QTableView et QTreeView ont une propriété sortingEnabled qui détermine si l'utilisateur peut trier la vue en cliquant sur l'en-tête horizontal de la vue. Par exemple :
treeView->setSortingEnabled(true);
Lorsque cette fonction est activée (par défaut, elle est désactivée), un clic sur une section d'en-tête permet de trier les éléments en fonction de cette colonne. En cliquant plusieurs fois, l'utilisateur peut alterner entre l'ordre croissant et l'ordre décroissant.

En coulisses, la vue appelle la fonction virtuelle sort() sur le modèle pour réorganiser les données dans le modèle. Pour rendre vos données triables, vous pouvez soit implémenter sort() dans votre modèle, soit utiliser un QSortFilterProxyModel pour envelopper votre modèle - QSortFilterProxyModel fournit une réimplémentation générique de sort() qui opère sur les sortRole() (Qt::DisplayRole par défaut) des éléments et qui comprend plusieurs types de données, y compris int, QString, et QDateTime. Pour les modèles hiérarchiques, le tri est appliqué de manière récursive à tous les éléments enfants. Les comparaisons de chaînes sont sensibles à la casse par défaut, ce qui peut être modifié en définissant la propriété sortCaseSensitivity.
Un comportement de tri personnalisé est obtenu en sous-classant QSortFilterProxyModel et en réimplémentant lessThan(), qui est utilisé pour comparer les éléments. Par exemple, le modèle QSortFilterProxyModel est utilisé pour comparer les éléments :
bool MySortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { QVariant leftData = sourceModel()->data(left); QVariant rightData = sourceModel()->data(right); if (leftData.userType() == QMetaType::QDateTime) return leftData.toDateTime() < rightData.toDateTime(); static const QRegularExpression emailPattern(u"[\\w\\.]*@[\\w\\.]*"_s); QString leftString = leftData.toString(); if (left.column() == 1) { const QRegularExpressionMatch match = emailPattern.match(leftString); if (match.hasMatch()) leftString = match.captured(0); } QString rightString = rightData.toString(); if (right.column() == 1) { const QRegularExpressionMatch match = emailPattern.match(rightString); if (match.hasMatch()) rightString = match.captured(0); } return QString::localeAwareCompare(leftString, rightString) < 0; }
(Cet extrait de code provient de l'exemple de modèle de tri/filtre personnalisé ).
Une autre approche du tri consiste à désactiver le tri dans la vue et à imposer un certain ordre à l'utilisateur. Pour ce faire, il faut appeler explicitement sort() avec la colonne et l'ordre souhaités comme arguments sur le QSortFilterProxyModel (ou sur le modèle d'origine s'il implémente sort()). Par exemple :
proxyModel->sort(2, Qt::AscendingOrder);
QSortFilterProxyModel peut être trié par la colonne -1, auquel cas il reprend l'ordre de tri du modèle source sous-jacent.
Remarque : sortColumn() renvoie la colonne de tri la plus récemment utilisée. La valeur par défaut est -1, ce qui signifie que ce modèle proxy n'est pas trié. Notez également que sort() affecte à sortColumn() la colonne de tri la plus récemment utilisée.
Filtrage
Outre le tri, QSortFilterProxyModel peut être utilisé pour masquer les éléments qui ne correspondent pas à un certain filtre. Le filtre est spécifié à l'aide d'un objet QRegularExpression et est appliqué à l'objet filterRole() (Qt::DisplayRole par défaut) de chaque élément, pour une colonne donnée. L'objet QRegularExpression peut être utilisé pour faire correspondre une expression régulière, un motif joker ou une chaîne fixe. Par exemple, pour les modèles hiérarchiques, l'objet
proxyModel->setFilterRegularExpression(QRegularExpression("\\.png", QRegularExpression::CaseInsensitiveOption)); proxyModel->setFilterKeyColumn(1);
Pour les modèles hiérarchiques, le filtre est appliqué récursivement à tous les enfants. Si un élément parent ne correspond pas au filtre, aucun de ses enfants ne sera affiché.
Un cas d'utilisation courant consiste à laisser l'utilisateur spécifier l'expression régulière du filtre, le motif de caractère générique ou la chaîne fixe dans une adresse QLineEdit et à connecter le signal textChanged() à setFilterRegularExpression(), setFilterWildcard() ou setFilterFixedString() pour réappliquer le filtre.
Il est possible d'obtenir un comportement de filtrage personnalisé en réimplémentant les fonctions filterAcceptsRow() et filterAcceptsColumn(). Par exemple (d'après l'exemple de modèle de tri/filtre personnalisé ), l'implémentation suivante ignore la propriété filterKeyColumn et effectue le filtrage sur les colonnes 0, 1 et 2 :
bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent); QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent); QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent); return (sourceModel()->data(index0).toString().contains(filterRegularExpression()) || sourceModel()->data(index1).toString().contains(filterRegularExpression())) && dateInRange(sourceModel()->data(index2).toDate()); }
(Cet extrait de code provient de l'exemple de modèle de tri/filtre personnalisé ).
Si vous travaillez avec de grandes quantités de filtrage et que vous devez invoquer beginFilterChange() / endFilterChange() à plusieurs reprises, l'utilisation de beginResetModel() / endResetModel() peut s'avérer plus efficace, en fonction de l'implémentation de votre modèle. Cependant, beginResetModel() / endResetModel() renvoie le modèle mandataire à son état d'origine, en perdant les informations de sélection, et entraînera le repeuplement du modèle mandataire.
Sous-classe
Puisque QAbstractProxyModel et ses sous-classes sont dérivées de QAbstractItemModel, la plupart des conseils concernant la sous-classification des modèles normaux s'appliquent également aux modèles mandataires. En outre, il convient de noter que de nombreuses implémentations par défaut des fonctions de cette classe sont écrites de manière à appeler les fonctions équivalentes dans le modèle source concerné. Ce mécanisme de procuration simple peut nécessiter d'être remplacé pour les modèles source ayant un comportement plus complexe ; par exemple, si le modèle source fournit une implémentation personnalisée de hasChildren(), vous devez également en fournir une dans le modèle de procuration.
Note : Des directives générales pour la sous-classification des modèles sont disponibles dans la Référence pour la sous-classification des modèles.
Voir aussi QAbstractProxyModel, QAbstractItemModel, Programmation modèle/vue, Exemple de modèle de tri/filtre de base, Exemple de modèle de tri/filtre personnalisé, et QIdentityProxyModel.
Documentation des types de membres
[since 6.10] enum class QSortFilterProxyModel::Direction
flags QSortFilterProxyModel::Directions
Cette énumération est utilisée pour spécifier la direction à laquelle un filtre personnalisé s'applique lorsque les paramètres du filtre sont modifiés.
| Constante | Valeur | Description |
|---|---|---|
QSortFilterProxyModel::Direction::Rows | 0x01 | Le filtre s'applique à rows |
QSortFilterProxyModel::Direction::Columns | 0x02 | Le filtre s'applique à columns |
QSortFilterProxyModel::Direction::Both | Rows | Columns | Le filtre s'applique à la fois aux lignes et aux colonnes |
Cette liste a été introduite dans Qt 6.10.
Le type Directions est un typedef pour QFlags<Direction>. Il stocke une combinaison OU de valeurs de direction.
Voir également beginFilterChange() et endFilterChange().
Documentation sur les propriétés
[bindable, since 6.0] autoAcceptChildRows : bool
Remarque : cette propriété prend en charge les liens QProperty.
si true, le modèle proxy ne filtrera pas les enfants des lignes acceptées, même s'ils seraient eux-mêmes filtrés dans le cas contraire.
La valeur par défaut est false.
Cette propriété a été introduite dans Qt 6.0.
Fonctions d'accès :
| bool | autoAcceptChildRows() const |
| void | setAutoAcceptChildRows(bool accept) |
Notifier signal :
| void | autoAcceptChildRowsChanged(bool autoAcceptChildRows) |
Voir aussi recursiveFilteringEnabled et filterAcceptsRow().
[bindable] dynamicSortFilter : bool
Remarque : Cette propriété prend en charge les liens QProperty.
Cette propriété indique si le modèle proxy est trié et filtré dynamiquement lorsque le contenu du modèle source change
Notez que vous ne devez pas mettre à jour le modèle source via le modèle proxy lorsque dynamicSortFilter est vrai. Par exemple, si vous définissez le modèle proxy sur un QComboBox, l'utilisation de fonctions qui mettent à jour le modèle, par exemple, addItem(), ne fonctionnera pas comme prévu. Une autre solution consiste à attribuer la valeur false à dynamicSortFilter et à appeler sort() après avoir ajouté des éléments à QComboBox.
La valeur par défaut est true.
Fonctions d'accès :
| bool | dynamicSortFilter() const |
| void | setDynamicSortFilter(bool enable) |
Voir également sortColumn().
[bindable] filterCaseSensitivity : Qt::CaseSensitivity
Remarque : Cette propriété prend en charge les liens QProperty.
Cette propriété indique la sensibilité à la casse du modèle QRegularExpression utilisé pour filtrer le contenu du modèle source.
Par défaut, le filtre est sensible à la casse.
Remarque : La définition de cette propriété propage la nouvelle sensibilité à la casse à la propriété filterRegularExpression et rompt donc sa liaison. De même, la définition explicite de filterRegularExpression modifie la sensibilité à la casse actuelle, ce qui rompt sa liaison.
Fonctions d'accès :
| Qt::CaseSensitivity | filterCaseSensitivity() const |
| void | setFilterCaseSensitivity(Qt::CaseSensitivity cs) |
Signal du notificateur :
| void | filterCaseSensitivityChanged(Qt::CaseSensitivity filterCaseSensitivity) |
Voir également filterRegularExpression et sortCaseSensitivity.
[bindable] filterKeyColumn : int
Remarque : Cette propriété prend en charge les liens QProperty.
Cette propriété indique la colonne dans laquelle est lue la clé utilisée pour filtrer le contenu du modèle source.
La valeur par défaut est 0. Si la valeur est -1, les clés seront lues dans toutes les colonnes.
Fonctions d'accès :
| int | filterKeyColumn() const |
| void | setFilterKeyColumn(int column) |
[bindable] filterRegularExpression : QRegularExpression
Remarque : Cette propriété prend en charge les liens QProperty.
Cette propriété contient le QRegularExpression utilisé pour filtrer le contenu du modèle source
La définition de cette propriété par le biais de la surcharge QRegularExpression écrase la valeur actuelle de filterCaseSensitivity. Par défaut, QRegularExpression est une chaîne vide correspondant à tous les contenus.
Si aucun QRegularExpression ou une chaîne vide n'est défini, tout ce qui se trouve dans le modèle source sera accepté.
Remarque : la définition de cette propriété propage la sensibilité à la casse de la nouvelle expression régulière à la propriété filterCaseSensitivity et rompt ainsi sa liaison. De même, le fait de définir explicitement filterCaseSensitivity modifie la sensibilité à la casse de l'expression régulière actuelle, ce qui rompt sa liaison.
Fonctions d'accès :
| QRegularExpression | filterRegularExpression() const |
| void | setFilterRegularExpression(const QString &pattern) |
| void | setFilterRegularExpression(const QRegularExpression ®ularExpression) |
Voir également filterCaseSensitivity, setFilterWildcard() et setFilterFixedString().
[bindable] filterRole : int
Remarque : Cette propriété prend en charge les liens QProperty.
Cette propriété contient le rôle de l'élément qui est utilisé pour interroger les données du modèle source lors du filtrage des éléments.
La valeur par défaut est Qt::DisplayRole.
Fonctions d'accès :
| int | filterRole() const |
| void | setFilterRole(int role) |
Signal Notifier :
| void | filterRoleChanged(int filterRole) |
Voir également filterAcceptsRow().
[bindable] isSortLocaleAware : bool
Remarque : Cette propriété prend en charge les liaisons QProperty.
Cette propriété contient le paramètre de prise en compte locale utilisé pour comparer les chaînes lors du tri
Par défaut, le tri n'est pas local.
Fonctions d'accès :
| bool | isSortLocaleAware() const |
| void | setSortLocaleAware(bool on) |
Signal Notificateur :
| void | sortLocaleAwareChanged(bool sortLocaleAware) |
Voir aussi sortCaseSensitivity et lessThan().
[bindable] recursiveFilteringEnabled : bool
Remarque : Cette propriété prend en charge les liens QProperty.
Cette propriété indique si le filtre doit être appliqué de manière récursive sur les enfants, et pour tout enfant correspondant, ses parents seront également visibles.
La valeur par défaut est false.
Fonctions d'accès :
| bool | isRecursiveFilteringEnabled() const |
| void | setRecursiveFilteringEnabled(bool recursive) |
Notifier signal :
| void | recursiveFilteringEnabledChanged(bool recursiveFilteringEnabled) |
Voir aussi autoAcceptChildRows et filterAcceptsRow().
[bindable] sortCaseSensitivity : Qt::CaseSensitivity
Remarque : Cette propriété prend en charge les liens QProperty.
Cette propriété définit la sensibilité à la casse utilisée pour comparer les chaînes lors du tri
Par défaut, le tri est sensible à la casse.
Fonctions d'accès :
| Qt::CaseSensitivity | sortCaseSensitivity() const |
| void | setSortCaseSensitivity(Qt::CaseSensitivity cs) |
Signal du notificateur :
| void | sortCaseSensitivityChanged(Qt::CaseSensitivity sortCaseSensitivity) |
Voir aussi filterCaseSensitivity et lessThan().
[bindable] sortRole : int
Remarque : Cette propriété prend en charge les liens QProperty.
Cette propriété contient le rôle de l'élément qui est utilisé pour interroger les données du modèle source lors du tri des éléments.
La valeur par défaut est Qt::DisplayRole.
Fonctions d'accès :
| int | sortRole() const |
| void | setSortRole(int role) |
Signal Notificateur :
| void | sortRoleChanged(int sortRole) |
Voir également lessThan().
Documentation des fonctions membres
[explicit] QSortFilterProxyModel::QSortFilterProxyModel(QObject *parent = nullptr)
Construit un modèle de filtre de tri avec l'adresse parent.
[virtual noexcept] QSortFilterProxyModel::~QSortFilterProxyModel()
Détruit ce modèle de filtre de tri.
[signal, since 6.0] void QSortFilterProxyModel::autoAcceptChildRowsChanged(bool autoAcceptChildRows)
Ce signal est émis lorsque la valeur de la propriété autoAcceptChildRows est modifiée.
Note : Signal de notification pour la propriété autoAcceptChildRows.
Cette fonction a été introduite dans Qt 6.0.
Voir aussi autoAcceptChildRows.
[protected, since 6.9] void QSortFilterProxyModel::beginFilterChange()
Prépare un changement de filtre.
Cette fonction doit être appelée si vous mettez en œuvre un filtrage personnalisé (par exemple filterAcceptsRow()), et que votre paramètre de filtrage est sur le point d'être modifié.
void MySortFilterProxyModel::setFilterMaximumDate(QDate date) { beginFilterChange(); maxDate = date; endFilterChange(QSortFilterProxyModel::Direction::Rows); }
Une fois que le filtre a été modifié, appelez endFilterChange() avec Direction::Rows pour les filtres de ligne, Direction::Columns pour les filtres de colonne, ou Direction::Columns|Direction::Rows si les lignes et les colonnes sont filtrées.
Cette fonction a été introduite dans Qt 6.9.
Voir aussi endFilterChange().
[override virtual] QModelIndex QSortFilterProxyModel::buddy(const QModelIndex &index) const
Réimplémente : QAbstractProxyModel::buddy(const QModelIndex &index) const.
[override virtual] bool QSortFilterProxyModel::canFetchMore(const QModelIndex &parent) const
Réimplémente : QAbstractProxyModel::canFetchMore(const QModelIndex &parent) const.
[override virtual] int QSortFilterProxyModel::columnCount(const QModelIndex &parent = QModelIndex()) const
Réimplémente : QAbstractItemModel::columnCount(const QModelIndex &parent) const.
[override virtual] QVariant QSortFilterProxyModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
Réimplémente : QAbstractProxyModel::data(const QModelIndex &proxyIndex, int role) const.
Voir également setData().
[override virtual] bool QSortFilterProxyModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
Réimplémente : QAbstractProxyModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent).
[protected, since 6.10] void QSortFilterProxyModel::endFilterChange(QSortFilterProxyModel::Directions directions = Direction::Both)
Invalide le filtrage actuel après que le paramètre de filtrage a changé.
Cette fonction doit être appelée si vous mettez en œuvre un filtrage personnalisé (par exemple filterAcceptsRow()) et que vos paramètres de filtrage ont changé. Le paramètre directions indique si le filtre personnalisé concerne les lignes, les colonnes ou les deux.
Appelez beginFilterChange() lorsque le paramètre de filtrage est sur le point de changer, puis appelez cette fonction une fois que les paramètres de filtrage ont été modifiés. Appeler directions avec la valeur Direction::Rows pour les filtres de ligne (c'est-à-dire que filterAcceptsRow() est implémenté), Direction::Columns pour les filtres de colonne (c'est-à-dire que filterAcceptsColumn() est implémenté), ou Direction::Both si les deux fonctions de filtrage sont implémentées.
Cette fonction a été introduite dans Qt 6.10.
[override virtual] void QSortFilterProxyModel::fetchMore(const QModelIndex &parent)
Réimplémente : QAbstractProxyModel::fetchMore(const QModelIndex &parent).
[virtual protected] bool QSortFilterProxyModel::filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const
Renvoie true si l'élément de la colonne indiquée par source_column et source_parent doit être inclus dans le modèle ; sinon, renvoie false.
Remarque : l'implémentation par défaut renvoie toujours true. Vous devez réimplémenter cette méthode pour obtenir le comportement décrit.
Voir aussi filterAcceptsRow(), setFilterFixedString(), setFilterRegularExpression() et setFilterWildcard().
[virtual protected] bool QSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
Renvoie true si l'élément de la ligne indiquée par source_row et source_parent doit être inclus dans le modèle ; sinon, renvoie false.
L'implémentation par défaut renvoie true si la valeur détenue par l'élément concerné correspond à la chaîne de filtrage, à la chaîne de caractères génériques ou à l'expression régulière.
Remarque : par défaut, Qt::DisplayRole est utilisé pour déterminer si la ligne doit être acceptée ou non. Ceci peut être modifié en définissant la propriété filterRole.
Voir également filterAcceptsColumn(), setFilterFixedString(), setFilterRegularExpression() et setFilterWildcard().
[signal] void QSortFilterProxyModel::filterCaseSensitivityChanged(Qt::CaseSensitivity filterCaseSensitivity)
Ce signal est émis lorsque la sensibilité à la casse du filtre passe à filterCaseSensitivity.
Note : Signal de notification pour la propriété filterCaseSensitivity.
[signal] void QSortFilterProxyModel::filterRoleChanged(int filterRole)
Ce signal est émis lorsque le rôle du filtre devient filterRole.
Note : Signal de notification pour la propriété filterRole.
[override virtual] Qt::ItemFlags QSortFilterProxyModel::flags(const QModelIndex &index) const
Réimplémente : QAbstractProxyModel::flags(const QModelIndex &index) const.
[override virtual] bool QSortFilterProxyModel::hasChildren(const QModelIndex &parent = QModelIndex()) const
Réimplémente : QAbstractProxyModel::hasChildren(const QModelIndex &parent) const.
[override virtual] QVariant QSortFilterProxyModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
Réimplémente : QAbstractProxyModel::headerData(int section, Qt::Orientation orientation, int role) const.
Voir également setHeaderData().
[override virtual] QModelIndex QSortFilterProxyModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const
Réimplémente : QAbstractItemModel::index(int row, int column, const QModelIndex &parent) const.
[override virtual] bool QSortFilterProxyModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
Réimplémente : QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent).
[override virtual] bool QSortFilterProxyModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())
Réimplémente : QAbstractItemModel::insertRows(int row, int count, const QModelIndex &parent).
[slot] void QSortFilterProxyModel::invalidate()
Invalide le tri et le filtrage en cours.
Voir aussi beginFilterChange() et endFilterChange().
[protected, since 6.0, until 6.13] void QSortFilterProxyModel::invalidateColumnsFilter()
Cette fonction sera obsolète à partir de la version 6.13.
Utilisez plutôt beginFilterChange() et endFilterChange(Direction::Rows).
Invalide le filtrage actuel des colonnes.
Cette fonction doit être appelée si vous implémentez un filtrage personnalisé (par filterAcceptsColumn()), et que vos paramètres de filtrage ont changé. Cette fonction diffère de invalidateFilter() en ce sens qu'elle n'appelle pas filterAcceptsRow(), mais seulement filterAcceptsColumn(). Vous pouvez l'utiliser à la place de invalidateFilter() si vous souhaitez masquer ou afficher une colonne dont les lignes ne changent pas.
Avant que les paramètres de votre filtre ne changent, appelez beginFilterChange().
Cette fonction a été introduite dans Qt 6.0.
Voir aussi invalidate(), invalidateRowsFilter() et beginFilterChange().
[protected, until 6.13] void QSortFilterProxyModel::invalidateFilter()
Cette fonction sera obsolète à partir de la version 6.13.
Utilisez plutôt beginFilterChange() et endFilterChange().
Invalide le filtrage actuel.
Cette fonction doit être appelée si vous mettez en œuvre un filtrage personnalisé (par exemple filterAcceptsRow()), et que vos paramètres de filtrage ont changé.
Avant que vos paramètres de filtrage ne changent, appelez beginFilterChange().
void MySortFilterProxyModel::setFilterMaximumDate(QDate date) { beginFilterChange(); maxDate = date; endFilterChange(QSortFilterProxyModel::Direction::Rows); }
Voir aussi invalidate(), invalidateColumnsFilter(), invalidateRowsFilter() et beginFilterChange().
[protected, since 6.0, until 6.13] void QSortFilterProxyModel::invalidateRowsFilter()
Cette fonction sera obsolète à partir de la version 6.13.
Utilisez plutôt beginFilterChange() et endFilterChange(Direction::Columns).
Invalide le filtrage actuel des lignes.
Cette fonction doit être appelée si vous mettez en œuvre un filtrage personnalisé (par filterAcceptsRow()), et que vos paramètres de filtrage ont changé. Cette fonction diffère de invalidateFilter() en ce sens qu'elle n'appelle pas filterAcceptsColumn(), mais seulement filterAcceptsRow(). Vous pouvez l'utiliser à la place de invalidateFilter() si vous souhaitez masquer ou afficher une ligne dont les colonnes ne changent pas.
Avant que les paramètres de votre filtre ne changent, appelez beginFilterChange().
Cette fonction a été introduite dans Qt 6.0.
Voir aussi invalidate(), invalidateFilter() et invalidateColumnsFilter().
[virtual protected] bool QSortFilterProxyModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
Renvoie true si la valeur de l'élément auquel se réfère l'indice donné source_left est inférieure à la valeur de l'élément auquel se réfère l'indice donné source_right, sinon renvoie false.
Cette fonction est utilisée comme l'opérateur < lors du tri et traite les types QVariant suivants :
- QMetaType::Int
- QMetaType::UInt
- QMetaType::LongLong
- QMetaType::ULongLong
- QMetaType::Float
- QMetaType::Double
- QMetaType::QChar
- QMetaType::QDate
- QMetaType::QTime
- QMetaType::QDateTime
- QMetaType::QString
Tout autre type sera converti en QString à l'aide de QVariant::toString().
La comparaison des QStringest sensible à la casse par défaut ; cela peut être modifié à l'aide de la propriété sortCaseSensitivity.
Par défaut, le Qt::DisplayRole associé au QModelIndexes est utilisé pour les comparaisons. Ceci peut être modifié en définissant la propriété sortRole.
Note : Les indices transmis correspondent au modèle source.
Voir aussi sortRole, sortCaseSensitivity, et dynamicSortFilter.
[override virtual] QModelIndex QSortFilterProxyModel::mapFromSource(const QModelIndex &sourceIndex) const
Réimplémente : QAbstractProxyModel::mapFromSource(const QModelIndex &sourceIndex) const.
Renvoie l'index du modèle dans le site QSortFilterProxyModel en fonction du site sourceIndex du modèle source.
Voir aussi mapToSource().
[override virtual] QItemSelection QSortFilterProxyModel::mapSelectionFromSource(const QItemSelection &sourceSelection) const
Réimplémente : QAbstractProxyModel::mapSelectionFromSource(const QItemSelection &sourceSelection) const.
[override virtual] QItemSelection QSortFilterProxyModel::mapSelectionToSource(const QItemSelection &proxySelection) const
Réimplémente : QAbstractProxyModel::mapSelectionToSource(const QItemSelection &proxySelection) const.
[override virtual] QModelIndex QSortFilterProxyModel::mapToSource(const QModelIndex &proxyIndex) const
Réimplémente : QAbstractProxyModel::mapToSource(const QModelIndex &proxyIndex) const.
Renvoie l'index du modèle source correspondant à l'adresse proxyIndex du modèle de filtre de tri.
Voir également mapFromSource().
[override virtual] QModelIndexList QSortFilterProxyModel::match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const
Réimplémente : QAbstractItemModel::match(const QModelIndex &start, int role, const QVariant &value, int hits, Qt::MatchFlags flags) const.
[override virtual] QMimeData *QSortFilterProxyModel::mimeData(const QModelIndexList &indexes) const
Réimplémente : QAbstractProxyModel::mimeData(const QModelIndexList &indexes) const.
[override virtual] QStringList QSortFilterProxyModel::mimeTypes() const
Réimplémente : QAbstractProxyModel::mimeTypes() const.
[override virtual] QModelIndex QSortFilterProxyModel::parent(const QModelIndex &child) const
Réimplémente : QAbstractItemModel::parent(const QModelIndex &index) const.
[signal] void QSortFilterProxyModel::recursiveFilteringEnabledChanged(bool recursiveFilteringEnabled)
Ce signal est émis lorsque le filtre récursif devient recursiveFilteringEnabled.
Note : Signal de notification pour la propriété recursiveFilteringEnabled.
[override virtual] bool QSortFilterProxyModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
Réimplémente : QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent).
[override virtual] bool QSortFilterProxyModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex())
Réimplémente : QAbstractItemModel::removeRows(int row, int count, const QModelIndex &parent).
[override virtual] int QSortFilterProxyModel::rowCount(const QModelIndex &parent = QModelIndex()) const
Réimplémente : QAbstractItemModel::rowCount(const QModelIndex &parent) const.
[override virtual] bool QSortFilterProxyModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
Réimplémente : QAbstractProxyModel::setData(const QModelIndex &index, const QVariant &value, int role).
Voir également data().
[slot] void QSortFilterProxyModel::setFilterFixedString(const QString &pattern)
Définit la chaîne fixe utilisée pour filtrer le contenu du modèle source à l'adresse pattern.
Cette méthode réinitialise les options de l'expression régulière tout en respectant la sensibilité à la casse.
Remarque : l'appel à cette méthode met à jour l'expression rationnelle, ce qui rompt la liaison pour filterRegularExpression. Cependant, cela n'a aucun effet sur les liaisons pour filterCaseSensitivity.
Voir aussi setFilterCaseSensitivity(), setFilterRegularExpression(), setFilterWildcard() et filterRegularExpression().
[slot] void QSortFilterProxyModel::setFilterRegularExpression(const QString &pattern)
Définit l'expression régulière utilisée pour filtrer le contenu du modèle source à pattern.
Cette méthode devrait être préférée pour le nouveau code car il utilisera QRegularExpression en interne.
Cette méthode réinitialise les options de l'expression régulière mais respecte la sensibilité à la casse.
Remarque : l'appel à cette méthode met à jour l'expression régulière, ce qui a pour effet de rompre la liaison avec filterRegularExpression, mais n'a aucun effet sur les liaisons avec filterCaseSensitivity.
Note : Fonction de définition de la propriété filterRegularExpression.
Note : Ce slot est surchargé. Pour se connecter à ce slot :
// Connect using qOverload:
connect(sender, &SenderClass::signal,
sortFilterProxyModel, qOverload(&QSortFilterProxyModel::setFilterRegularExpression));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
sortFilterProxyModel, [receiver = sortFilterProxyModel](const QString &pattern) { receiver->setFilterRegularExpression(pattern); }); Voir aussi setFilterCaseSensitivity(), setFilterWildcard(), setFilterFixedString(), et filterRegularExpression().
[slot] void QSortFilterProxyModel::setFilterWildcard(const QString &pattern)
Définit l'expression régulière utilisée pour filtrer le contenu du modèle source à l'adresse pattern.
Cette méthode réinitialise les options de l'expression régulière tout en respectant la sensibilité à la casse.
Remarque : l'appel à cette méthode met à jour l'expression régulière, ce qui rompt la liaison pour filterRegularExpression. Cependant, cela n'a aucun effet sur les liaisons pour filterCaseSensitivity.
Voir aussi setFilterCaseSensitivity(), setFilterRegularExpression(), setFilterFixedString() et filterRegularExpression().
[override virtual] bool QSortFilterProxyModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)
Réimplémente : QAbstractProxyModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role).
Voir également headerData().
[override virtual] void QSortFilterProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
Réimplémente : QAbstractProxyModel::setSourceModel(QAbstractItemModel *sourceModel).
[override virtual] QModelIndex QSortFilterProxyModel::sibling(int row, int column, const QModelIndex &idx) const
Réimplémente : QAbstractProxyModel::sibling(int row, int column, const QModelIndex &idx) const.
[override virtual] void QSortFilterProxyModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder)
Réimplémente : QAbstractProxyModel::sort(int column, Qt::SortOrder order).
Trie le modèle par column dans order. Si l'ordre de tri column est inférieur à zéro, le modèle sera trié par la ligne du modèle source dans order.
Voir aussi sortColumn().
[signal] void QSortFilterProxyModel::sortCaseSensitivityChanged(Qt::CaseSensitivity sortCaseSensitivity)
Ce signal est émis lorsque la sensibilité à la casse pour le tri passe à sortCaseSensitivity.
Note : Signal de notification pour la propriété sortCaseSensitivity.
int QSortFilterProxyModel::sortColumn() const
Renvoie la colonne actuellement utilisée pour le tri
Cette fonction renvoie la colonne de tri la plus récemment utilisée. La valeur par défaut est -1, ce qui signifie que ce modèle proxy ne trie pas.
Voir aussi sort().
[signal] void QSortFilterProxyModel::sortLocaleAwareChanged(bool sortLocaleAware)
Ce signal est émis lorsque le paramètre de prise en compte de la locale passe à sortLocaleAware.
Note : Signal de notification pour la propriété isSortLocaleAware.
Qt::SortOrder QSortFilterProxyModel::sortOrder() const
Renvoie l'ordre de tri actuellement utilisé
Cette fonction renvoie l'ordre de tri le plus récemment utilisé. La valeur par défaut est Qt::AscendingOrder.
Voir aussi sort().
[signal] void QSortFilterProxyModel::sortRoleChanged(int sortRole)
Ce signal est émis lorsque le rôle de tri passe à sortRole.
Note : Signal de notification pour la propriété sortRole.
[override virtual] QSize QSortFilterProxyModel::span(const QModelIndex &index) const
Réimplémente : QAbstractProxyModel::span(const QModelIndex &index) const.
[override virtual] Qt::DropActions QSortFilterProxyModel::supportedDropActions() const
Réimplémente : QAbstractProxyModel::supportedDropActions() const.
© 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.