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 |
属性
- sourceModel : QAbstractItemModel*
公共函数
| 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 |
信号
| void | sourceModelChanged() |
受保护函数
(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.