在QTableView中过滤数据行可以通过使用QSortFilterProxyModel来实现。下面是一个简单的例子:
- 创建一个QStandardItemModel对象并将其设置为QTableView的模型:
QStandardItemModel *model = new QStandardItemModel(this);
tableView->setModel(model);
- 向模型添加数据:
// 添加数据到模型
for (int row = 0; row < rowCount; ++row) {
QList<QStandardItem*> items;
for (int column = 0; column < columnCount; ++column) {
QStandardItem* item = new QStandardItem(data[row][column]);
items.append(item);
}
model->appendRow(items);
}
- 创建一个QSortFilterProxyModel对象并将其设置为QTableView的代理模型:
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(model);
tableView->setModel(proxyModel);
- 设置要过滤的列:
proxyModel->setFilterKeyColumn(columnIndex);
- 设置过滤规则:
proxyModel->setFilterRegExp(filterString);
完整的代码示例:
#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QSortFilterProxyModel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTableView tableView;
// 设置模型
QStandardItemModel *model = new QStandardItemModel(&tableView);
tableView.setModel(model);
// 添加数据到模型
QList<QStringList> data = {{"John", "Doe", "30", "Male"},
{"Jane", "Smith", "25", "Female"},
{"Bob", "Johnson", "40", "Male"}};
int rowCount = data.size();
int columnCount = data[0].size();
for (int row = 0; row < rowCount; ++row) {
QList<QStandardItem*> items;
for (int column = 0; column < columnCount; ++column) {
QStandardItem* item = new QStandardItem(data[row][column]);
items.append(item);
}
model->appendRow(items);
}
// 设置代理模型
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(&tableView);
proxyModel->setSourceModel(model);
tableView.setModel(proxyModel);
// 设置要过滤的列和过滤规则
int columnIndex = 1; // 过滤第2列(即姓氏)
QString filterString = "Doe"; // 过滤出姓氏为Doe的行
proxyModel->setFilterKeyColumn(columnIndex);
proxyModel->setFilterRegExp(filterString);
tableView.show();
return a.exec();
}