Название: представление дерева Отправлено: Larry от Январь 19, 2011, 16:03 Добрый день, форумчане! Появился такая проблема...Я пытаюсь создать модель дерева из таблицы бд...В принципе дерево выводит, но не могу реализовать добавления дочерних итемов...
Код: void TreeModel::setupModelData(const QString &tableName, TreeItem *parent) Название: Re: представление дерева Отправлено: Larry от Январь 19, 2011, 17:09 как я понимаю здесь должен быть еще один вложенный цикл, где и идет добавление итемов, но пока не могу это реализовать...помогите пожалуйста:)
Название: Re: представление дерева Отправлено: developer от Январь 21, 2011, 20:18 Попробуй все это реализовать так.
Таблица базы данных id|pid|name| все остальное Выборка из таблицы - SELECT id, pid from table_name group by pid; Заполнение виджета - достаточно просто. Теперь несколлько слов что все это значит. Пусть у нас есть дерево id | pid | name 1 0 name1 - эта нода не имеет отца а являеться корнем 2 1 name_parent_is1 3 1 name1_parent_is1 4 3 name2_parent_is3 То-есть у тебя будет дерево name1 id=1, pid=0 |---name_parent_is1 id=2, pid=1 |---name1_parent_is1 id=3, pid=1 |----name2_parent_is3 id=4, pid=3 Эта структура позволяэт создавать деревья в базе любой степени вложености, без особенных усилий и обработок. Заполнение виджета, в питоне сделал двома строчками, в с++ не делал, но не думаю что сложно Название: Re: представление дерева Отправлено: Larry от Январь 23, 2011, 12:03 Спасибо большое, но пока я ждал ответа:) разобрался как сделать, теперь работает все без проблем:)
Название: Re: представление дерева Отправлено: Fess от Январь 23, 2011, 13:16 Пиши ответ, кому-нибудь обязательно пригодится :)
Название: Re: представление дерева Отправлено: Larry от Январь 28, 2011, 22:29 Пиши ответ, кому-нибудь обязательно пригодится :) Код: void TreeModel::setupModelData(const QString &nameDb, TreeItem *parent) Название: Re: представление дерева Отправлено: Troglodit от Февраль 02, 2011, 18:10 Не пишите, что это решение, а то вдруг кто-то такое напишет. Я думал у меня руки кривые.
Теперь по теме: Зачем нужны 2 SQLTableModel и двойной цикл + плюс фильтрация в цикле. Это просто кошмар. Я полный ньюб в qt , но то, что алгоритм убогий (индусский), видно невооруженным глазом. Решение всего этого безобразия очен простое (для деревьев с небольшим количеством элементов ). QSqlQuery ("select ... from view_tree_table inner join item on..."),т.е. 1 запрос вернет вам без всякой фильтрации и прочего бреда то,что вы хотите. ЗЫ. я сам искал ответ на этот вопрос, один хороший человек подсказал(это не финальный вариант, но гораздо логичней, чем в вашем топике). http://www.sql.ru/forum/actualthread.aspx?tid=611751 (http://www.sql.ru/forum/actualthread.aspx?tid=611751) Название: Re: представление дерева Отправлено: Larry от Февраль 13, 2011, 09:43 Troglodit, спасибо за критику!!!Я уже переписал этот бред через QSqlQuery...компактнее :)...спасибо
|