LINUX.ORG.RU

Сортировка дерева

 


0

3

Доброго времени суток! Пишу GUI, у меня есть treeView, так вот, я хочу над ним сделать какой-нибудь lineEdit,чтобы туда писать название и дерево сортировалось бы и выводило совпадения только. Т.е дерево

Фрукты

---Яблоки

---Апельсины

---Мандарины

Овощи

---Огурцы

---Помидоры

Я пишу в lineEdit Мандарины, и оно в дереве оставляет только Мандарины, а остальное не выводит. Хорошо бы пример кода какого-нибудь, если есть. Заранее спасибо!



Последнее исправление: aarexer (всего исправлений: 2)

Ответ на: комментарий от E

Дефолтный QSortFilterProxyModel не подходит, так как если родитель не соответствует фильтру, то и дети не будут выведены, даже если они соответствуют фильтру.

Уточнение, то есть результаты надо представлять одноуровневым выводом? То есть если ввел «ины», то выдалось

Мандарины
Апельсины

А не

Фрукты
--Мандарины
--Апельсины

grondek
()
Ответ на: комментарий от grondek

Унаследуй от него свой собственный прокси-класс, в котором переопредели filterAcceptsColumn() и filterAcceptsRow(). В них определяй по индексу родительской модели, к какому родителю принадлежит ветка/лист и решай, выводить его в результат или нет. В общем, развлекайся с этими функциями.

E ★★★
()
Ответ на: комментарий от grondek

А, чёрт, ты не ТС. Пардон. В общем, это был топикстартеру совету.

E ★★★
()
Ответ на: комментарий от E

Да, но ТСу такой путь подойдет, если вывод в виде дерева. А если в виде списка, то там надо будет переопределять намного больше, чтобы построить из дерева столбец.

grondek
()
Ответ на: комментарий от grondek

Если в виде списка, то либо свести дерево к плоскому виду, либо выбрать не QTreeView. Сейчас ТС придёт и разберётся.

E ★★★
()
Ответ на: комментарий от aarexer
Фрукты
--Мандарины
--Апельсины

На мой взгляд проще, надо переопередлить одну функцию: QSortFilterProxyModel::filterAcceptsRow()

grondek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.