![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
mishabard |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 31 Регистрация: 13.6.2011 Из: Киев Пользователь №: 2741 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Здравствуйте!Реализовал дерево из примера EditableTreeModel. Но заполняю его не как в примере (там оно не удобное на мой взгляд), а с помошью рекурсии, так как данные хранятся в базе в виде id,parentid,name. Дело в том что, чтобы их привести к виду как в примере EditableTreeModel. нужно выполнить туже рекурсию, но только на уровне сервера, быстрее кончно будет заполнение, но тоже не то.
Вопрос первый. Хочу избавиться от рекурсии и заполнять ветки и удалять их по нажатию на "+". Можете тыкнуть, куда посмотреть. Не могу понять как это нужно сделать с этой моделью. Вопрос второй. У меня сейчас в качестве модели связной список, мне чтобы пробежать по модели и найти нужный id, необходимо опять бегать с помошью рекурсии по древовидному списку. Можно как-то пробежаться по всем строкам QTreeView (включая вложенные)? Может лучше использовать QStandartItemModel? Все списки будут содержать id,parentid,name, и возможно ставить ChekBox напротив name. Спасибо! |
|
|
![]() |
Дмитрий - |
![]()
Сообщение
#2
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 2.8.2011 Пользователь №: 2782 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вопрос первый. Хочу избавиться от рекурсии... Вопрос второй. У меня сейчас в качестве модели связной список, мне чтобы пробежать по модели и найти нужный id, необходимо опять бегать с помошью рекурсии по древовидному списку. Можно как-то пробежаться по всем строкам QTreeView (включая вложенные)? Для того чтобы избавится от рекурсии я использовал кэширование элементов дерева с помощью QHash. QHash помогает заполнить QStandardItemModel, а после заполнения вы будете иметь хэш-таблицу с помощью которой вы сможете быстро получить доступ к нужному элементу модели: codegroup это ваш id, codegroupup - parentid.ВАЖНОЕ УСЛОВИЕ: результат запроса должен быть упорядочен по parentid (ORDER BY parentid). Использование кэширования позволяет заполнить модель элементами дерева за один цикл. Правда увеличивается расход памяти на кэширование, но зато сокращается расход памяти и времени на рекурсивный вызов функции. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 13.7.2025, 22:45 |