Sur cette page

QSortFilterProxyModel Class

La classe QSortFilterProxyModel permet de trier et de filtrer les données transmises entre un autre modèle et une vue. En savoir plus...

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

Types publics

(since 6.12) enum class DataChangeRelevanceFlag { NotRelevant, RelevantForFiltering, RelevantForSorting, RelevantForFilteringAndSorting }
flags DataChangeRelevanceFlags
(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

Slots publics

void invalidate()
void setFilterFixedString(const QString &pattern)
void setFilterRegularExpression(const QString &pattern)
void setFilterRegularExpression(const QRegularExpression &regularExpression)
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.12) QSortFilterProxyModel::DataChangeRelevanceFlags dataChangeRelevanceFlags(const QModelIndex &sourceTopLeft, const QModelIndex &sourceBottomRight, const QList<int> &roles) const
(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

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 mappant les index qu’il fournit à de nouveaux index, correspondant à différents emplacements, destinés à être utilisés par les vues. Cette approche permet de restructurer un modèle source donné du point de vue des vues sans nécessiter de transformations sur les données sous-jacentes, et sans dupliquer les données en mémoire.

Supposons que nous souhaitions 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() en passant MyItemModel en argument, puis 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 d’origine s’affichent dans la vue. Toute modification effectuée via le QSortFilterProxyModel est appliquée au modèle d’origine.

Le QSortFilterProxyModel fait office d’enveloppe pour le modèle d’origine. Si vous avez besoin de convertir des QModelIndexs de source en index de modèle triés/filtrés ou inversement, utilisez les méthodes mapToSource(), mapFromSource(), mapSelectionToSource() et mapSelectionFromSource().

Remarque : par défaut, le modèle réorganise et refiltre 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 « Modèle de tri/filtrage de base » et « Modèle de tri/filtrage personnalisé » illustrent comment utiliser QSortFilterProxyModel pour effectuer un tri et un filtrage de base, et comment créer une sous-classe de ce modèle pour implémenter un comportement personnalisé.

Les modèles de tri

QTableView et QTreeView disposent d’une propriété sortingEnabled qui détermine si l’utilisateur peut trier la vue en cliquant sur l’en-tête horizontal de celle-ci. Par exemple :

        treeView->setSortingEnabled(true);

Lorsque cette fonctionnalité est activée (elle est désactivée par défaut), un clic sur une section d’en-tête trie les éléments selon cette colonne. En cliquant plusieurs fois, l’utilisateur peut alterner entre l’ordre croissant et décroissant.

Un QTreeView trié

En arrière-plan, la vue appelle la fonction virtuelle ` sort()` sur le modèle afin de réorganiser les données de ce dernier. Pour rendre vos données triables, vous pouvez soit implémenter la méthode ` sort()` dans votre modèle, soit utiliser un `QSortFilterProxyModel` pour encapsuler votre modèle – `QSortFilterProxyModel` fournit une réimplémentation générique de ` sort()` qui opère sur la méthode ` sortRole()` (`Qt::DisplayRole ` par défaut) des éléments et qui prend en charge plusieurs types de données, notamment ` 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 de caractères sont sensibles à la casse par défaut ; cela peut être modifié en définissant la propriété sortCaseSensitivity.

Pour personnaliser le comportement de tri, il suffit de créer une sous-classe de `QSortFilterProxyModel` et de réimplémenter la méthode ` lessThan()`, qui sert à comparer les éléments. Par exemple :

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 est tiré de l'exemple « Modèle de tri/filtrage personnalisé ».)

Une autre approche du tri consiste à désactiver le tri dans la vue et à imposer un ordre précis à l'utilisateur. Pour ce faire, il suffit d'appeler explicitement la méthode ` sort()` en passant en arguments la colonne et l'ordre souhaités sur le `QSortFilterProxyModel` (ou sur le modèle d'origine s'il implémente la méthode ` sort()`). Par exemple :

        proxyModel->sort(2, Qt::AscendingOrder);

QSortFilterProxyModel peut être trié selon la colonne -1, auquel cas il reprend l’ordre de tri du modèle source sous-jacent.

Remarque : la méthode sortColumn() renvoie la dernière colonne de tri utilisée. La valeur par défaut est -1, ce qui signifie que ce modèle proxy n’effectue pas de tri. Notez également que la méthode sort() définit la méthode sortColumn() sur la dernière colonne de tri 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é à la méthode filterRole() (Qt::DisplayRole par défaut) de chaque élément, pour une colonne donnée. L’objet ` QRegularExpression ` peut être utilisé pour rechercher une expression régulière, un motif avec caractères génériques ou une chaîne fixe. Par exemple :

        proxyModel->setFilterRegularExpression(QRegularExpression("\\.png", QRegularExpression::CaseInsensitiveOption));
        proxyModel->setFilterKeyColumn(1);

Pour les modèles hiérarchiques, le filtre est appliqué de manière récursive à 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, le motif avec caractères génériques ou la chaîne fixe du filtre dans un « QLineEdit ». Pour ce faire, connectez le signal « QLineEdit::textChanged() » ou « textEdited() » à l’une des fonctions suivantes : « setFilterRegularExpression() », « setFilterWildcard() » ou « setFilterFixedString() ».

Il est possible de personnaliser le comportement de filtrage en réimplémentant les fonctions filterAcceptsRow() et filterAcceptsColumn(). Par exemple (extrait de l’exemple « Custom Sort/Filter Model »), 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 « Modèle de tri/filtrage personnalisé ».)

Si vous effectuez un grand nombre de filtrages et devez appeler à plusieurs reprises les méthodes ` beginFilterChange()` / ` endFilterChange()`, l’utilisation de ` beginResetModel()` / ` endResetModel()` peut s’avérer plus efficace, selon l’implémentation de votre modèle. Cependant, les méthodes ` beginResetModel()` / ` endResetModel()` rétablissent le modèle proxy à son état d’origine, ce qui entraîne la perte des informations de sélection et le réinitialisation du modèle proxy.

Sous-classement

Étant donné que ` 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 proxy. De plus, il convient de noter que bon nombre des implémentations par défaut des fonctions de cette classe sont écrites de manière à appeler les fonctions équivalentes dans le modèle source correspondant. Ce mécanisme de proxy simple peut devoir être redéfini pour les modèles sources présentant 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 proxy.

Remarque : certaines directives générales concernant la création de sous-classes de modèles sont disponibles dans la référence sur la création de sous-classes de modèles.

Voir également QAbstractProxyModel, QAbstractItemModel, Programmation modèle/vue, Exemple de modèle de tri/filtrage de base, Exemple de modèle de tri/filtrage personnalisé et QIdentityProxyModel.

Documentation sur les types de membres

[since 6.12] enum class QSortFilterProxyModel::DataChangeRelevanceFlag
flags QSortFilterProxyModel::DataChangeRelevanceFlags

Cette énumération sert à préciser l'opération à laquelle se rapporte une modification de la source.

ConstanteValeurDescription
QSortFilterProxyModel::DataChangeRelevanceFlag::NotRelevant0x00La modification n'est pertinente ni pour le filtrage ni pour le tri
QSortFilterProxyModel::DataChangeRelevanceFlag::RelevantForFiltering0x01La modification est pertinente pour le filtrage
QSortFilterProxyModel::DataChangeRelevanceFlag::RelevantForSorting0x02La modification a une incidence sur le tri
QSortFilterProxyModel::DataChangeRelevanceFlag::RelevantForFilteringAndSortingRelevantForFiltering | RelevantForSortingLa modification a une incidence à la fois sur le filtrage et sur le tri

Cette énumération a été introduite dans Qt 6.12.

Le type `DataChangeRelevanceFlags` est un `typedef` pour ` QFlags<DataChangeRelevanceFlag>`. Il stocke une combinaison « OU » de valeurs `DataChangeRelevanceFlag`.

Voir également dataChangeRelevanceFlags().

[since 6.10] enum class QSortFilterProxyModel::Direction
flags QSortFilterProxyModel::Directions

Cette énumération sert à préciser le sens dans lequel un filtre personnalisé s'applique lorsque les paramètres du filtre sont modifiés.

ConstanteValeurDescription
QSortFilterProxyModel::Direction::Rows0x01Le filtre s'applique à rows
QSortFilterProxyModel::Direction::Columns0x02Le filtre s'applique à columns
QSortFilterProxyModel::Direction::BothRows | ColumnsLe filtre s'applique à la fois aux lignes et aux colonnes

Cette énumération a été introduite dans Qt 6.10.

Le type Directions est un typedef pour QFlags<Direction>. Il stocke une combinaison OU de valeurs 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 liaisons de type « QProperty ».

Si la valeur est « true », le modèle proxy ne filtrera pas les enfants des lignes acceptées, même si ceux-ci seraient normalement filtrés.

La valeur par défaut est « false ».

Cette énumération a été introduite dans Qt 6.0.

Fonctions d'accès :

bool autoAcceptChildRows() const
void setAutoAcceptChildRows(bool accept)

Signal de notification :

void autoAcceptChildRowsChanged(bool autoAcceptChildRows)

Voir également recursiveFilteringEnabled et filterAcceptsRow().

[bindable] dynamicSortFilter : bool

Remarque : cette propriété prend en charge les liaisons de type « QProperty ».

Cette propriété indique si le modèle proxy est trié et filtré dynamiquement chaque fois que 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 défini sur true. Par exemple, si vous définissez le modèle proxy sur une liste de type « QComboBox », l’utilisation de fonctions qui mettent à jour le modèle, telles que ` addItem()`, ne fonctionnera pas comme prévu. Une alternative consiste à définir `dynamicSortFilter` sur `false` et à appeler ` sort()` après avoir ajouté des éléments à la liste de type « 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 liaisons de type « QProperty ».

Cette propriété définit la sensibilité à la casse du modèle d’ 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 vers la propriété « filterRegularExpression », ce qui rompt son lien. De même, la définition explicite de « filterRegularExpression » modifie la sensibilité à la casse actuelle, rompant ainsi son lien.

Fonctions d’accès :

Qt::CaseSensitivity filterCaseSensitivity() const
void setFilterCaseSensitivity(Qt::CaseSensitivity cs)

Signal de notification :

void filterCaseSensitivityChanged(Qt::CaseSensitivity filterCaseSensitivity)

Voir également filterRegularExpression et sortCaseSensitivity.

[bindable] filterKeyColumn : int

Remarque : cette propriété prend en charge les liaisons de type « QProperty ».

Cette propriété indique la colonne à partir de 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 à partir de 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 liaisons de type « QProperty ».

Cette propriété contient l'QRegularExpression utilisé pour filtrer le contenu du modèle source

La définition de cette propriété via la surcharge de la méthode ` QRegularExpression ` écrase l'filterCaseSensitivity. Par défaut, la ` QRegularExpression ` est une chaîne vide qui correspond à tout le contenu.

Si aucune expression régulière ( QRegularExpression ) n'est définie ou si une chaîne vide est définie, tout le contenu du modèle source sera accepté.

L’expression régulière est comparée à chaque ligne du modèle source ; par conséquent, un motif complexe ou mal formé peut ralentir, voire bloquer, l’ensemble de l’application, en particulier lorsqu’elle est utilisée avec des modèles volumineux. Il est conseillé aux développeurs d’applications de tester les performances et l’évolutivité de l’expression régulière avant de l’utiliser. Si l’expression régulière provient d’une entrée potentiellement non fiable, envisagez de la nettoyer avant de la transmettre à cette méthode ou d’utiliser plutôt setFilterFixedString()

Remarque : la définition de cette propriété propage la sensibilité à la casse de la nouvelle expression régulière à la propriété ` filterCaseSensitivity `, ce qui rompt son association. De même, la définition explicite de ` filterCaseSensitivity ` modifie la sensibilité à la casse de l'expression régulière actuelle, rompant ainsi son association.

Fonctions d’accès :

QRegularExpression filterRegularExpression() const
void setFilterRegularExpression(const QString &pattern)
void setFilterRegularExpression(const QRegularExpression &regularExpression)

Voir également filterCaseSensitivity, setFilterWildcard() et setFilterFixedString().

[bindable] filterRole : int

Remarque : cette propriété prend en charge les liaisons de type « QProperty ».

Cette propriété contient le rôle d'élément 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 de notification :

void filterRoleChanged(int filterRole)

Voir également filterAcceptsRow().

[bindable] isSortLocaleAware : bool

Remarque : cette propriété prend en charge les liaisons de type « QProperty ».

Cette propriété contient le paramètre de prise en compte du contexte local utilisé pour comparer les chaînes de caractères lors du tri

Par défaut, le tri ne tient pas compte du contexte local.

Fonctions d'accès :

bool isSortLocaleAware() const
void setSortLocaleAware(bool on)

Signal de notification :

void sortLocaleAwareChanged(bool sortLocaleAware)

Voir également sortCaseSensitivity et lessThan().

[bindable] recursiveFilteringEnabled : bool

Remarque : cette propriété prend en charge les liaisons de type « QProperty ».

Cette propriété indique si le filtre doit être appliqué de manière récursive aux enfants et si, 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)

Signal de notification :

void recursiveFilteringEnabledChanged(bool recursiveFilteringEnabled)

Voir également autoAcceptChildRows et filterAcceptsRow().

[bindable] sortCaseSensitivity : Qt::CaseSensitivity

Remarque : cette propriété prend en charge les liaisons de type « QProperty ».

Cette propriété contient le paramètre de sensibilité à la casse utilisé pour comparer les chaînes de caractères lors du tri

Par défaut, le tri tient compte de la casse.

Fonctions d'accès :

Qt::CaseSensitivity sortCaseSensitivity() const
void setSortCaseSensitivity(Qt::CaseSensitivity cs)

Signal de notification :

void sortCaseSensitivityChanged(Qt::CaseSensitivity sortCaseSensitivity)

Voir également filterCaseSensitivity et lessThan().

[bindable] sortRole : int

Remarque : cette propriété prend en charge les liaisons de type « QProperty ».

Cette propriété contient le rôle d'élément 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 de notification :

void sortRoleChanged(int sortRole)

Voir également lessThan().

Documentation des fonctions membres

[explicit] QSortFilterProxyModel::QSortFilterProxyModel(QObject *parent = nullptr)

Crée un modèle de filtre de tri à partir de l'parent ion fournie.

[virtual noexcept] QSortFilterProxyModel::~QSortFilterProxyModel()

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

Remarque : signalde notification pour la propriété ` autoAcceptChildRows`.

Cette fonction a été introduite dans Qt 6.0.

Voir également autoAcceptChildRows.

[protected, since 6.9] void QSortFilterProxyModel::beginFilterChange()

Prépare le remplacement du filtre.

Cette fonction doit être appelée si vous implémentez 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 le filtre modifié, appelez endFilterChange() avec Direction::Rows pour les filtres de lignes, Direction::Columns pour les filtres de colonnes, ou Direction::Columns|Direction::Rows si les lignes et les colonnes sont toutes deux filtrées.

Cette fonction a été introduite dans Qt 6.9.

Voir également 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 aussi setData().

[protected invokable, since 6.12] QSortFilterProxyModel::DataChangeRelevanceFlags QSortFilterProxyModel::dataChangeRelevanceFlags(const QModelIndex &sourceTopLeft, const QModelIndex &sourceBottomRight, const QList<int> &roles) const

Réimplémentez cet emplacement dans une sous-classe pour indiquer quand une modification du modèle source a une incidence sur le filtrage ou le tri. Cette fonctionnalité sert à optimiser les performances en évitant les appels inutiles à ` filterAcceptsRow()` et ` lessThan()` lorsque les modifications du modèle source n’affectent pas les résultats du tri et du filtrage. Les paramètres sourceTopLeft, sourceBottomRight et roles sont ceux émis par le signal dataChanged() du modèle source, correspondant à la modification dont la pertinence est évaluée.

Remarque : en raison de contraintes de compatibilité binaire, cette méthode ne peut pas être virtuelle avant Qt 7. En attendant, redéclarez-la dans une sous-classe en tant que slot ou méthode ` Q_INVOKABLE ` ; ` QSortFilterProxyModel ` la détectera et l’invoquera dynamiquement.

Remarque : L’implémentation par défaut part du principe que toute modification est pertinente pour le filtrage, et que seules les modifications apportées à la colonne de tri source sont pertinentes pour le tri.

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

Cette fonction a été introduite dans Qt 6.12.

Voir également DataChangeRelevanceFlags, filterAcceptsRow() et lessThan().

[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)

Annule le filtrage actuel après une modification des paramètres de filtrage.

Cette fonction doit être appelée si vous implémentez un filtrage personnalisé (par exemple, filterAcceptsRow()) et que vos paramètres de filtrage ont changé. Le paramètre directions spécifie si le filtre personnalisé s'applique aux lignes, aux colonnes ou aux 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. Appelez cette fonction avec directions défini sur Direction::Rows pour les filtres de lignes (c’est-à-dire lorsque filterAcceptsRow() est implémentée), sur Direction::Columns pour les filtres de colonnes (c’est-à-dire lorsque filterAcceptsColumn() est implémentée), ou sur 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 les paramètres 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 également 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 les paramètres « 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 contenue par l’élément concerné correspond à la chaîne de filtrage, à la chaîne contenant des caractères génériques ou à l’expression régulière.

Remarque : par défaut, la valeur « Qt::DisplayRole » est utilisée pour déterminer si la ligne doit être acceptée ou non. Ce comportement 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 ».

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

[signal] void QSortFilterProxyModel::filterRoleChanged(int filterRole)

Ce signal est émis lorsque le rôle du filtre passe à « filterRole ».

Remarque : signalde 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 aussi 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()

Annule le tri et le filtrage actuels.

Voir également 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é (via filterAcceptsColumn()) et que vos paramètres de filtrage ont changé. Elle diffère de invalidateFilter() en ce qu’elle n’appelle pas filterAcceptsRow(), mais uniquement filterAcceptsColumn(). Vous pouvez l’utiliser à la place de invalidateFilter() si vous souhaitez masquer ou afficher une colonne dont les lignes ne changent pas.

Avant de modifier vos paramètres de filtrage, appelez beginFilterChange().

Cette fonction a été introduite dans Qt 6.0.

Voir également 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 implémentez un filtrage personnalisé (par exemple, filterAcceptsRow()) et que vos paramètres de filtrage ont changé.

Avant de modifier vos paramètres de filtrage, appelez beginFilterChange().

void MySortFilterProxyModel::setFilterMaximumDate(QDate date)
{
    beginFilterChange();
    maxDate = date;
    endFilterChange(QSortFilterProxyModel::Direction::Rows);
}

Voir également 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 implémentez un filtrage personnalisé (via filterAcceptsRow()) et que vos paramètres de filtrage ont changé. Elle diffère de invalidateFilter() en ce qu’elle n’appelle pas filterAcceptsColumn(), mais uniquement filterAcceptsRow(). Vous pouvez l’utiliser à la place de invalidateFilter() si vous souhaitez masquer ou afficher une ligne dont les colonnes ne changent pas.

Avant de modifier vos paramètres de filtrage, appelez ` beginFilterChange()`.

Cette fonction a été introduite dans Qt 6.0.

Voir également 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 référencé par l'index donné source_left est inférieure à celle de l'élément référencé par l'index donné source_right; sinon, renvoie false.

Cette fonction est utilisée comme operator< lors du tri et utilise QAbstractItemModel::compareData().

Par défaut, la comparaison des QStrings tient compte de la casse ; cela peut être modifié à l'aide de la propriété sortCaseSensitivity.

Par défaut, l’ Qt::DisplayRole associé aux QModelIndexest utilisé pour les comparaisons. Il est possible de modifier ce comportement en définissant la propriété sortRole.

Remarque : les indices transmis correspondent au modèle source.

Voir également 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 ` QSortFilterProxyModel `, étant donné l’ sourceIndex provenant 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’ proxyIndex donné, issu du modèle de filtre de tri.

Voir aussi 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 paramètre du filtre récursif est défini sur « recursiveFilteringEnabled ».

Remarque : signalde 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 aussi data().

[slot] void QSortFilterProxyModel::setFilterFixedString(const QString &pattern)

Définit la chaîne fixe utilisée pour filtrer le contenu du modèle source sur la valeur indiquée pattern.

Cette méthode réinitialise les options d’expression régulière tout en conservant la distinction entre majuscules et minuscules.

Remarque : l’appel de cette méthode met à jour l’expression régulière, rompant ainsi la liaison pour filterRegularExpression. Elle n’a toutefois aucun effet sur les liaisons filterCaseSensitivity.

Voir également 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 sur pattern.

Cette méthode est à privilégier pour le nouveau code, car elle utilise en interne QRegularExpression.

Cette méthode réinitialise les options de l'expression régulière, mais respecte la distinction entre majuscules et minuscules.

Remarque : l'appel de cette méthode met à jour l'expression régulière, rompant ainsi la liaison pour filterRegularExpression. Elle n'a toutefois aucun effet sur les liaisons filterCaseSensitivity.

Remarque : fonctionde définition pour la propriété filterRegularExpression.

Remarque : ce slot est surchargé. Pour vous 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); });
Pour plus d’exemples et d’approches, voir la section « Connexion à des slots surchargés ».

Voir également setFilterCaseSensitivity(), setFilterWildcard(), setFilterFixedString() et filterRegularExpression().

[slot] void QSortFilterProxyModel::setFilterWildcard(const QString &pattern)

Définit l'expression avec caractères génériques utilisée pour filtrer le contenu du modèle source selon l'pattern.

Cette méthode réinitialise les options d’expression régulière tout en conservant la distinction entre majuscules et minuscules.

Remarque : l’appel de cette méthode met à jour l’expression régulière, rompant ainsi la liaison pour filterRegularExpression. Elle n’a toutefois aucun effet sur les liaisons filterCaseSensitivity.

Voir également 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 aussi 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 selon column dans l'order donné. Si l'column de tri est inférieur à zéro, le modèle sera trié par ligne du modèle source dans l'order donné.

Voir également ` sortColumn()` ().

[signal] void QSortFilterProxyModel::sortCaseSensitivityChanged(Qt::CaseSensitivity sortCaseSensitivity)

Ce signal est émis lorsque le paramètre de tri tenant compte de la casse passe à la valeur « sortCaseSensitivity ».

Remarque : signalde notification pour la propriété « sortCaseSensitivity ».

int QSortFilterProxyModel::sortColumn() const

Renvoie la colonne actuellement utilisée pour le tri

Cette fonction renvoie la dernière colonne de tri utilisée. La valeur par défaut est -1, ce qui signifie que ce modèle proxy n'effectue pas de tri.

Voir également sort().

[signal] void QSortFilterProxyModel::sortLocaleAwareChanged(bool sortLocaleAware)

Ce signal est émis lorsque le paramètre de prise en compte des paramètres régionaux passe à la valeur « sortLocaleAware ».

Remarque : signalde 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 utilisé le plus récemment. 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 ».

Remarque : signalde 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.