- Qt 6.10
- Qt Core
- C++ Classes
- QAbstractProxyModel
- Qt 6.10.2 Reference Documentation

# QAbstractProxyModel Class

The QAbstractProxyModel class provides a base class for proxy item models that can do sorting, filtering or other data processing tasks. More...

Header: | `#include <QAbstractProxyModel>`
CMake: | `find_package(Qt6 REQUIRED COMPONENTS Core)` `target_link_libraries(mytarget PRIVATE Qt6::Core)`
qmake: | `QT += core`
Inherits: | QAbstractItemModel
Inherited By: | QIdentityProxyModel, QSortFilterProxyModel, and QTransposeProxyModel

- List of all members, including inherited members

## Properties

- sourceModel : QAbstractItemModel*

## Public Functions

| QAbstractProxyModel(QObject *parent = nullptr)
virtual | ~QAbstractProxyModel()
QBindable<QAbstractItemModel *> | bindableSourceModel()
virtual QModelIndex | mapFromSource(const QModelIndex &sourceIndex) const = 0
virtual QItemSelection | mapSelectionFromSource(const QItemSelection &sourceSelection) const
virtual QItemSelection | mapSelectionToSource(const QItemSelection &proxySelection) const
virtual QModelIndex | mapToSource(const QModelIndex &proxyIndex) const = 0
virtual void | setSourceModel(QAbstractItemModel *sourceModel)
QAbstractItemModel * | sourceModel() const

## Reimplemented Public Functions

virtual QModelIndex | buddy(const QModelIndex &index) const override
virtual bool | canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const override
virtual bool | canFetchMore(const QModelIndex &parent) const override
`(since 6.0)` virtual bool | clearItemData(const QModelIndex &index) override
virtual QVariant | data(const QModelIndex &proxyIndex, 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 QMap<int, QVariant> | itemData(const QModelIndex &proxyIndex) const override
virtual QMimeData * | mimeData(const QModelIndexList &indexes) const override
virtual QStringList | mimeTypes() const override
virtual void | revert() override
virtual QHash<int, QByteArray> | roleNames() 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 bool | setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) 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 bool | submit() override
virtual Qt::DropActions | supportedDragActions() const override
virtual Qt::DropActions | supportedDropActions() const override

## Signals

void | sourceModelChanged()

## Protected Functions

`(since 6.2)` QModelIndex | createSourceIndex(int row, int col, void *internalPtr) const

## Detailed Description

This class defines the standard interface that proxy models must use to be able to interoperate correctly with other model/view components. It is not supposed to be instantiated directly.

All standard proxy models are derived from the QAbstractProxyModel class. If you need to create a new proxy model class, it is usually better to subclass an existing class that provides the closest behavior to the one you want to provide.

Proxy models that filter or sort items of data from a source model should be created by using or subclassing QSortFilterProxyModel.

To subclass QAbstractProxyModel, you need to implement mapFromSource() and mapToSource(). The mapSelectionFromSource() and mapSelectionToSource() functions only need to be reimplemented if you need a behavior different from the default behavior.

Note: If the source model is deleted or no source model is specified, the proxy model operates on a empty placeholder model.

See also QSortFilterProxyModel, QAbstractItemModel, and Model/View Programming.

## Property Documentation

### `[bindable]` sourceModel : QAbstractItemModel*

Note: This property supports QProperty bindings.

This property holds the source model of this proxy model.

Access functions:

QAbstractItemModel * | sourceModel() const
virtual void | setSourceModel(QAbstractItemModel *sourceModel)

Notifier signal:

void | sourceModelChanged() | [see note below]

Note: This is a private signal. It can be used in signal connections but cannot be emitted by the user.

## Member Function Documentation

### `[explicit]` QAbstractProxyModel::QAbstractProxyModel(QObject *parent = nullptr)

Constructs a proxy model with the given parent.

### `[virtual noexcept]` QAbstractProxyModel::~QAbstractProxyModel()

Destroys the proxy model.

### `[override virtual]` QModelIndex QAbstractProxyModel::buddy(const QModelIndex &index) const

Reimplements: QAbstractItemModel::buddy(const QModelIndex &index) const.

### `[override virtual]` bool QAbstractProxyModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const

Reimplements: QAbstractItemModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const.

### `[override virtual]` bool QAbstractProxyModel::canFetchMore(const QModelIndex &parent) const

Reimplements: QAbstractItemModel::canFetchMore(const QModelIndex &parent) const.

### `[override virtual, since 6.0]` bool QAbstractProxyModel::clearItemData(const QModelIndex &index)

Reimplements: QAbstractItemModel::clearItemData(const QModelIndex &index).

This function was introduced in Qt 6.0.

### `[protected, since 6.2]` QModelIndex QAbstractProxyModel::createSourceIndex(int row, int col, void *internalPtr) const

Equivalent to calling createIndex on the source model.

This method is useful if your proxy model wants to maintain the parent-child relationship of items in the source model. When reimplementing mapToSource(), you can call this method to create an index for row row and column col of the source model.

A typical use would be to save the internal pointer coming from the source model in the proxy index when reimplementing mapFromSource() and use the same internal pointer as internalPtr to recover the original source index when reimplementing mapToSource().

This function was introduced in Qt 6.2.

### `[override virtual]` QVariant QAbstractProxyModel::data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const

Reimplements: QAbstractItemModel::data(const QModelIndex &index, int role) const.

See also setData().

### `[override virtual]` bool QAbstractProxyModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)

Reimplements: QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent).

### `[override virtual]` void QAbstractProxyModel::fetchMore(const QModelIndex &parent)

Reimplements: QAbstractItemModel::fetchMore(const QModelIndex &parent).

### `[override virtual]` Qt::ItemFlags QAbstractProxyModel::flags(const QModelIndex &index) const

Reimplements: QAbstractItemModel::flags(const QModelIndex &index) const.

### `[override virtual]` bool QAbstractProxyModel::hasChildren(const QModelIndex &parent = QModelIndex()) const

Reimplements: QAbstractItemModel::hasChildren(const QModelIndex &parent) const.

### `[override virtual]` QVariant QAbstractProxyModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const

Reimplements: QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role) const.

See also setHeaderData().

### `[override virtual]` QMap<int, QVariant> QAbstractProxyModel::itemData(const QModelIndex &proxyIndex) const

Reimplements: QAbstractItemModel::itemData(const QModelIndex &index) const.

See also setItemData().

### `[pure virtual invokable]` QModelIndex QAbstractProxyModel::mapFromSource(const QModelIndex &sourceIndex) const

Reimplement this function to return the model index in the proxy model that corresponds to the sourceIndex from the source model.

Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.

See also mapToSource().

### `[virtual invokable]` QItemSelection QAbstractProxyModel::mapSelectionFromSource(const QItemSelection &sourceSelection) const

Returns a proxy selection mapped from the specified sourceSelection.

Reimplement this method to map source selections to proxy selections.

Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.

### `[virtual invokable]` QItemSelection QAbstractProxyModel::mapSelectionToSource(const QItemSelection &proxySelection) const

Returns a source selection mapped from the specified proxySelection.

Reimplement this method to map proxy selections to source selections.

Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.

### `[pure virtual invokable]` QModelIndex QAbstractProxyModel::mapToSource(const QModelIndex &proxyIndex) const

Reimplement this function to return the model index in the source model that corresponds to the proxyIndex in the proxy model.

Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.

See also mapFromSource().

### `[override virtual]` QMimeData *QAbstractProxyModel::mimeData(const QModelIndexList &indexes) const

Reimplements: QAbstractItemModel::mimeData(const QModelIndexList &indexes) const.

### `[override virtual]` QStringList QAbstractProxyModel::mimeTypes() const

Reimplements: QAbstractItemModel::mimeTypes() const.

### `[override virtual]` void QAbstractProxyModel::revert()

Reimplements: QAbstractItemModel::revert().

### `[override virtual]` QHash<int, QByteArray> QAbstractProxyModel::roleNames() const

Reimplements: QAbstractItemModel::roleNames() const.

### `[override virtual]` bool QAbstractProxyModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)

Reimplements: QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role).

See also data().

### `[override virtual]` bool QAbstractProxyModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)

Reimplements: QAbstractItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role).

See also headerData().

### `[override virtual]` bool QAbstractProxyModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)

Reimplements: QAbstractItemModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles).

See also itemData().

### `[virtual]` void QAbstractProxyModel::setSourceModel(QAbstractItemModel *sourceModel)

Sets the given sourceModel to be processed by the proxy model.

Subclasses should call beginResetModel() at the beginning of the method, disconnect from the old model, call this method, connect to the new model, and call endResetModel().

Note: Setter function for property sourceModel.

See also sourceModel().

### `[override virtual]` QModelIndex QAbstractProxyModel::sibling(int row, int column, const QModelIndex &idx) const

Reimplements: QAbstractItemModel::sibling(int row, int column, const QModelIndex &index) const.

### `[override virtual]` void QAbstractProxyModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder)

Reimplements: QAbstractItemModel::sort(int column, Qt::SortOrder order).

### QAbstractItemModel *QAbstractProxyModel::sourceModel() const

Returns the model that contains the data that is available through the proxy model.

Note: Getter function for property sourceModel.

See also setSourceModel().

### `[override virtual]` QSize QAbstractProxyModel::span(const QModelIndex &index) const

Reimplements: QAbstractItemModel::span(const QModelIndex &index) const.

### `[override virtual]` bool QAbstractProxyModel::submit()

Reimplements: QAbstractItemModel::submit().

### `[override virtual]` Qt::DropActions QAbstractProxyModel::supportedDragActions() const

Reimplements: QAbstractItemModel::supportedDragActions() const.

### `[override virtual]` Qt::DropActions QAbstractProxyModel::supportedDropActions() const

Reimplements: QAbstractItemModel::supportedDropActions() const.