в самом деле, если перед setFilterRegExp делаю резет исходной модели, все работает нормально. спасибо, решил проблему.
но возникла новая беда. есть функция, которая делает примерно следующее (на самом деле алгоритм сложнее, но к вопросу это не относится):
void find(QAbstractItemView *itemView, const QString &text)
{
QAbstractItemModel *model = itemView->model();
QModelIndexList match = model->match(model->index(0, 0), Qt::DisplayRole, text, 1, Qt::MatchWrap | Qt::MatchRecursive | Qt::MatchStartsWith);
if (!match.isEmpty()) itemView->setCurrentIndex(match.first());
}
если я делаю:
MyCustomModel *myCustomModel = new MyCustomModel(this);
QTreeView = new QTreeView(this);
treeView->setModel(myCustomModel);
find(treeView, text);
нужная строка находится и выделяется, дерево до нее разворачивается.
если же через прокси модель:
MyCustomModel *myCustomModel = new MyCustomModel(this);
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(myCustomModel);
QTreeView = new QTreeView(this);
treeView->setModel(proxyModel);
find(treeView, text);
строка находится (match возвращает верный индекс), но дерево не разворачивается до элемента, определенного через setCurrentIndex. при этом currentIndex возвращает верный индекс. какие-то тонкости работы с индексами прокси модели или просто баг?