qt 实现过滤器
时间: 2023-07-03 14:08:33 浏览: 104
在 Qt 中,可以使用 QSortFilterProxyModel 类实现过滤器。这个类可以作为一个中介模型,同时提供筛选和排序功能。
下面是一个简单的例子,演示如何使用 QSortFilterProxyModel 实现过滤器:
```cpp
#include <QApplication>
#include <QSortFilterProxyModel>
#include <QStandardItemModel>
#include <QTableView>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建数据模型
QStandardItemModel model;
model.setColumnCount(2);
model.setRowCount(4);
model.setData(model.index(0, 0), "Alice");
model.setData(model.index(0, 1), "20");
model.setData(model.index(1, 0), "Bob");
model.setData(model.index(1, 1), "25");
model.setData(model.index(2, 0), "Charlie");
model.setData(model.index(2, 1), "30");
model.setData(model.index(3, 0), "David");
model.setData(model.index(3, 1), "35");
// 创建代理模型
QSortFilterProxyModel proxyModel;
proxyModel.setSourceModel(&model);
proxyModel.setFilterKeyColumn(0); // 按照第一列过滤
// 创建表格视图
QTableView tableView;
tableView.setModel(&proxyModel);
tableView.show();
// 设置过滤条件
proxyModel.setFilterRegExp(QRegExp("A.*"));
return a.exec();
}
```
在这个例子中,我们创建了一个 QStandardItemModel 数据模型,包含 4 行 2 列的数据。然后我们创建了一个 QSortFilterProxyModel 代理模型,它的源模型为我们创建的数据模型。我们将过滤关键字列设置为第一列,并设置过滤条件为所有以字母 A 开头的字符串。
最后,我们创建了一个 QTableView 表格视图,并将代理模型设置为它的模型。当我们运行程序时,只有第一行的数据会被显示,因为它的第一列是以字母 A 开头的。
阅读全文