QTableView实时过滤

3

我的情况是这样的:我有一个QTableView和LineEdit。我想实时显示包含LineEdit中值的数据。我猜我应该使用QSortProxyFilterModel,但我不知道如何做。我写了这个:

void MainWindow::on_lineFind_textEdited(const QString &arg1)
{

QSortFilterProxyModel proxy;
proxy.setSourceModel(ui->tableView->model());
proxy.setFilterRegExp(arg1);
QModelIndex index=proxy.mapToSource(proxy.index(0,0));
if(index.isValid())
  {
    ui->tableView->selectionModel()->select(index,QItemSelectionModel::Select | QItemSelectionModel::Rows);
    ui->tableView->scrollTo(index,QAbstractItemView::EnsureVisible);
  }


}

但是它不起作用(没有任何变化可见)。以下是它应该如何运行的示例:Clementine播放器播放列表。

1
你为什么要使用硬编码的索引坐标?QModelIndex index=proxy.mapToSource(proxy.index(0,0)); - RobbieE
1个回答

4
你在函数中创建了QSortFilterProxyModel并立即销毁它,这是不正确的用法。你需要创建一个QSortFilterProxyModel对象(可能使用new),然后调用QTableView::setModel将代理模型附加到视图中。之后更改才会生效。
在初始化时:
ui->setupUi(this);
my_model = new QStandardItemModel(); // or any other model class
proxy_model = new QSortFilterProxyModel();
ui->table_view->setModel(proxy_model);
proxy_model->setSourceModel(my_model);

在textEdited插槽中:

proxy_model->setFilterRegExp(arg1);

这里谁负责什么?proxymodel会被视图删除还是我需要同时负责两者? - namezero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接