2013-06-11 3 views
1

Моя ситуация выглядит так: у меня есть QTableView и LineEdit. Я хотел бы показать данные, которые содержат значение в LineEdit в реальном времени. Думаю, я должен использовать QSortProxyFilterModel, но я не знаю, как это сделать. Я написал следующее:QTableView фильтрация в реальном времени

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.

+1

Почему вы используете жестко закодированный индекс координату? 'QModelIndex index = proxy.mapToSource (proxy.index (0,0));' – RobbieE

ответ

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); 
Смежные вопросы