我的情况如下:我有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播放列表。
答案 0 :(得分:2)
您创建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);