C++ QTableView实时过滤

C++ QTableView实时过滤,c++,qt,filtering,qtableview,C++,Qt,Filtering,Qtableview,我的情况如下:我有QTableView和LineEdit。我想实时显示LineEdit中包含值的数据。我想我应该使用QSortProxyFilterModel,但我不知道怎么做。我写道: void MainWindow::on_lineFind_textEdited(const QString &arg1) { QSortFilterProxyModel proxy; proxy.setSourceModel(ui->tableView->model()); proxy.s

我的情况如下:我有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播放器播放列表。

您创建
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);
在文本编辑槽中:

proxy_model->setFilterRegExp(arg1);

为什么要使用硬编码索引坐标
QModelIndex index=proxy.mapToSource(proxy.index(0,0))谁在这里拥有什么?proxymodel是否会被视图删除,或者我是否对两者都负责?