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

Un QTreeView trié

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.

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 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 &regularExpression)

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 :

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); });
Pour plus d'exemples et d'approches, voir connecting to overloaded slots.

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.