QSortFilterProxyModel
是 Qt 框架中一个非常有用的类,属于模型/视图框架的一部分。它的主要功能是对数据进行排序和过滤,使得在展示数据时能够更灵活地管理显示的信息。
主要功能
排序:可以对来自底层模型的数据进行排序。用户可以定义排序的规则,例如按某一列升序或降序排列。
过滤:允许根据特定条件过滤出底层模型中的数据。例如,可以只显示符合某些文本条件的项。
透明性:
QSortFilterProxyModel
充当一个代理模型,其接口与底层模型相同,因此可以方便地与视图(如QTableView
,QListView
)一起使用。
使用方法
创建底层模型:首先,需要创建一个实现了
QAbstractItemModel
的底层模型(如QStandardItemModel
)。创建 QSortFilterProxyModel 实例:
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(parent);
设置底层模型:
proxyModel->setSourceModel(sourceModel);
设置过滤规则(如果需要):
proxyModel->setFilterRegExp(QRegExp("your_filter_expression"));
使用代理模型更新视图:将视图的数据源设置为
proxyModel
。view->setModel(proxyModel);
自定义排序和过滤逻辑(可选):可以通过重写
lessThan()
和filterAcceptsRow()
方法来提供自定义的比较和过滤规则。
示例代码
以下是一个简单示例:
#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QSortFilterProxyModel>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建标准项目模型
QStandardItemModel *model = new QStandardItemModel(5, 2); // 5行2列
model->setHorizontalHeaderLabels(QStringList() << "Name" << "Age");
// 填充一些数据
model->setItem(0, 0, new QStandardItem("Alice"));
model->setItem(0, 1, new QStandardItem("30"));
model->setItem(1, 0, new QStandardItem("Bob"));
model->setItem(1, 1, new QStandardItem("25"));
// 创建代理并设置源模型
QSortFilterProxyModel *proxy = new QSortFilterProxyModel();
proxy->setSourceModel(model);
// 设置过滤器(例如,只显示名字中包含"A"的项)
proxy->setFilterRegExp(QRegExp("A", Qt::CaseInsensitive));
// 创建视图并使用代理作为数据源
QTableView *view = new QTableView();
view->setModel(proxy);
view->show();
return app.exec();
}
希望这些信息能帮助你理解和使用 QSortFilterProxyModel
!如果有其他问题,请随时问我。
内容由零声教学AI助手提供,问题来源于学员提问