Зачем нужна прокси-модель
QSortFilterProxyModel располагается между моделью данных и представлением. Она позволяет сортировать и фильтровать строки, не меняя исходную модель: это полезно, когда данные должны сохранять свой исходный порядок или используются несколькими представлениями.
auto *proxy = new QSortFilterProxyModel(this);
proxy->setSourceModel(sourceModel);
proxy->setFilterCaseSensitivity(Qt::CaseInsensitive);
proxy->setFilterKeyColumn(0);
proxy->setFilterFixedString(ui->searchEdit->text());
ui->tableView->setModel(proxy);
proxy->sort(0, Qt::AscendingOrder);При изменении текста поиска вызывайте setFilterFixedString() повторно. Если фильтр должен применяться к другой роли, задайте её через setFilterRole().
Индексы источника и прокси
Индекс из представления относится к прокси-модели. Перед изменением исходной модели его нужно преобразовать через mapToSource(); обратное преобразование выполняет mapFromSource(). Если правила сравнения нестандартны, переопределите lessThan(). Например, для чисел, хранящихся строками, сравнивайте числовые значения, иначе порядок будет лексикографическим: «100» окажется перед «20».
Прокси-модель упрощает интерфейс, но не заменяет серверную фильтрацию для очень больших наборов данных.