qt create table view 在表头添加多筛选功能,例子
时间: 2023-07-16 14:16:51 浏览: 164
Qt自定义表头实现过滤功能的方法
以下是一个使用Qt中的QTableView和QSortFilterProxyModel实现多列筛选的例子:
首先,在Qt Creator中创建一个Qt Widgets应用程序,并添加一个QTableView,然后在MainWindow类的构造函数中添加以下代码:
```cpp
QStandardItemModel *model = new QStandardItemModel(4, 2, this); // 创建模型
model->setHeaderData(0, Qt::Horizontal, tr("Name")); // 设置表头
model->setHeaderData(1, Qt::Horizontal, tr("Age"));
for (int row = 0; row < 4; ++row)
{
for (int column = 0; column < 2; ++column)
{
QString data = QString("row %1, column %2").arg(row + 1).arg(column + 1);
QStandardItem *item = new QStandardItem(data); // 创建Item
model->setItem(row, column, item); // 将Item添加到模型中
}
}
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this); // 创建代理模型
proxyModel->setSourceModel(model); // 设置源模型
ui->tableView->setModel(proxyModel); // 将代理模型设置为TableView的模型
```
以上代码创建了一个包含两列的表格,每列有四行数据,然后将QStandardItemModel和QSortFilterProxyModel与QTableView关联。接下来,我们需要添加多列筛选功能。
在MainWindow类中添加以下槽函数:
```cpp
void MainWindow::on_filterLineEdit_textChanged(const QString &text)
{
QRegExp regExp(text, Qt::CaseInsensitive, QRegExp::FixedString); // 创建正则表达式
QSortFilterProxyModel *proxyModel = qobject_cast<QSortFilterProxyModel*>(ui->tableView->model()); // 获取代理模型
proxyModel->setFilterRegExp(regExp); // 设置筛选条件
}
```
该槽函数会在QLineEdit中输入文本时被调用,我们可以在其中获取输入的文本,创建一个正则表达式,并将其设置为筛选条件。接下来,我们需要在UI中添加一个QLineEdit,并将其与该槽函数关联。在MainWindow类的构造函数中添加以下代码:
```cpp
connect(ui->filterLineEdit, &QLineEdit::textChanged, this, &MainWindow::on_filterLineEdit_textChanged);
```
现在,我们可以在UI中看到一个QLineEdit,输入文本后,表格中的数据将会按照多列筛选的条件进行过滤。例如,我们可以输入“row 1”来过滤出包含“row 1”的行。
阅读全文