本页内容

QAbstractProxyModel Class

QAbstractProxyModel 类为代理项目模型提供了一个基类,该类能够执行排序、过滤或其他数据处理任务。更多内容...

头文件: #include <QAbstractProxyModel>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
继承自: QAbstractItemModel
继承自:

QIdentityProxyModel、QSortFilterProxyModel 以及QTransposeProxyModel

属性

公共函数

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

重新实现的公共函数

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

信号

受保护函数

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

详细说明

该类定义了代理模型必须使用的标准接口,以便能够与其他模型/视图组件正确地进行互操作。该类不应被直接实例化。

所有标准代理模型都继承自 QAbstractProxyModel 类。若需创建新的代理模型类,通常最好继承一个现有类,该类提供的行为应与您想要实现的行为最为接近。

用于过滤或排序源模型中数据项的代理模型,应通过使用或继承QSortFilterProxyModel 来创建。

要继承 QAbstractProxyModel,您需要实现mapFromSource() 和mapToSource() 方法。只有当您需要与默认行为不同的行为时,才需要重新实现mapSelectionFromSource() 和mapSelectionToSource() 方法。

注意:如果 源模型被删除或未指定源模型,代理模型将基于一个空的占位符模型进行操作。

另请参阅 QSortFilterProxyModel 、QAbstractItemModel 以及《模型/视图编程》。

属性文档

[bindable] sourceModel : QAbstractItemModel*

注意:此 属性支持QProperty 绑定。

该属性保存了此代理模型的源模型。

访问函数:

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

通知信号:

void sourceModelChanged()[see note below]

注意:这是一个 私有信号。它可在信号连接中使用,但用户无法触发该信号。

成员函数文档

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

根据给定的parent 构建一个代理模型。

[virtual noexcept] QAbstractProxyModel::~QAbstractProxyModel()

销毁代理模型。

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

重写了: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

重写了: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

重写了:QAbstractItemModel::canFetchMore(const QModelIndex &parent) const。

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

重写了:QAbstractItemModel::clearItemData(const QModelIndex &index)。

该函数在 Qt 6.0 中引入。

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

相当于在源模型上调用 createIndex 方法。

如果您的代理模型希望保留源模型中项的父子关系,此方法将非常有用。在重写mapToSource() 时,您可以调用此方法,为源模型的行row 和列col 创建索引。

典型的用法是在重写mapFromSource() 时,将源模型提供的内部指针保存到代理索引中;而在重写mapToSource() 时,将该内部指针作为internalPtr 参数,以此恢复原始的源索引。

该函数于 Qt 6.2 版本中引入。

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

重写了:QAbstractItemModel::data(const QModelIndex &index, int role) const。

另请参阅 setData()。

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

重写了:QAbstractItemModel::dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)。

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

重写了:QAbstractItemModel::fetchMore(const QModelIndex &parent)。

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

重写了:QAbstractItemModel::flags(const QModelIndex &index) const。

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

重写了:QAbstractItemModel::hasChildren(const QModelIndex &parent) const。

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

重写了:QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role) const。

另请参阅 setHeaderData()。

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

重写了:QAbstractItemModel::itemData(const QModelIndex &index) const。

另请参阅 setItemData()。

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

重写此函数,使其返回代理模型中与源模型中sourceIndex 对应的模型索引。

注意:该 函数可通过元对象系统以及从 QML 中调用。参见Q_INVOKABLE 。

另请参阅 mapToSource()。

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

返回一个从指定的sourceSelection 映射而来的代理选择。

重写此方法以将源选择映射到代理选择。

注意:此 函数可通过元对象系统以及从 QML 中调用。参见Q_INVOKABLE 。

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

返回一个从指定的proxySelection 映射而来的源选择。

重写此方法以将代理选择映射到源选择。

注意:此 函数可通过元对象系统和从 QML 中调用。参见Q_INVOKABLE 。

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

重写此函数,使其返回源模型中与代理模型中proxyIndex 对应的模型索引。

注意:该 函数可通过元对象系统以及从 QML 中调用。参见Q_INVOKABLE 。

另请参阅 mapFromSource()。

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

重写了:QAbstractItemModel::mimeData(const QModelIndexList &indexes) const。

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

重新实现了:QAbstractItemModel::mimeTypes() const。

[override virtual] void QAbstractProxyModel::revert()

重写了:QAbstractItemModel::revert()。

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

重新实现了:QAbstractItemModel::roleNames() const。

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

重写了:QAbstractItemModel::setData (const QModelIndex &index, const QVariant &value, int role)。

另请参阅 data()。

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

重写了:QAbstractItemModel::setHeaderData (int section, Qt::Orientation orientation, const QVariant &value, int role)。

另请参见 headerData()。

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

重写了:QAbstractItemModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)。

另请参阅 itemData()。

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

将给定的sourceModel 设置为由代理模型进行处理。

子类应在方法开头调用 `beginResetModel()`,与旧模型断开连接,调用本方法,连接到新模型,并调用 `endResetModel()`。

注意: 这是属性sourceModel 的设置器 函数。

另请参阅 sourceModel()。

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

重写了:QAbstractItemModel::sibling(int row, int column, const QModelIndex &index) const。

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

重写了:QAbstractItemModel::sort(int column, Qt::SortOrder order)。

QAbstractItemModel *QAbstractProxyModel::sourceModel() const

返回包含可通过代理模型访问的数据的模型。

注意: 这是属性 sourceModel 的获取 函数。

另请参阅 setSourceModel()。

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

重写了:QAbstractItemModel::span(const QModelIndex &index) const。

[override virtual] bool QAbstractProxyModel::submit()

重写了:QAbstractItemModel::submit()。

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

重新实现了:QAbstractItemModel::supportedDragActions() const。

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

重新实现了:QAbstractItemModel::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.