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 Player 播放列表。

4

1 回答 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);
于 2013-06-11T13:30:50.827 回答