Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: sh123 от Января 28, 2009, 16:49



Название: Скрытие и развёртываение листьев в QTreeView
Отправлено: sh123 от Января 28, 2009, 16:49
Добрый вечер! История такая...  :)

Есть кастомная model, кастомный прокси и QTreeView, прокси используется для сортировки и фильтрации элеметов. Идея такая, что когда фильтр активирован, то все листья дерева разворачиваются и в то же время те листья, которые не имеют потомков скрываются. В данный момент, удалось создать автоматическое скрытие листьев с использованием QTreeView::setRowHidden(). Почему бы не использовать фильтр для этого? Проблема в детектировании пустых листьев в процессе фильтрации, необходимо получить количество элеметов в листе дерева и для этого необходимы индексы прокси модели, но так как QSortFilterProxyModel::filterAcceptRow получает индексы исходной модели и при маппинге индексов в прокси модель происходит рекурсия filterAcceptRow. Также удалось автоматически разворвачивать и сворачивать листья дерева с помощью QTreeView::collapse и QTreeView::expand, но вот проблема в том, когда оба метода используются вместе (скрытие\разворачиваение листьев и скрытие\отображение листьев), то QT выдаёт следующее предупреждение и последующие вызовы к QTreeView::collapse и QTreeView::expand не имеют желаемого результата
Warning: QTreeView::rowsInserted internal representation of the model has been corrupted, resetting.

Может у кого-то есть какие-либо идеи как можно проще добиться желаемого более простыми способами или решить данную проблему.
Спасибо!