Помогите убрать костыли ) |
Здравствуйте, гость ( Вход | Регистрация )
Помогите убрать костыли ) |
alien |
10.7.2010, 21:59
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 10.7.2010 Пользователь №: 1876 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вообщем нужно отбразить таблицу из Lua в QTreeView
Пример таблици
Делаю на основе http://doc.trolltech.com/4.5/itemviews-simpletreemodel.html http://doc.trolltech.com/4.5/itemviews-sim...eeitem-cpp.html Без изменений. Функция получает список Имя,Obj
Передаем список в модель
И собственно говоря основной код
Больше всего костылей в setupModelDataRec может есть кто подскажет? |
|
|
Алексей1153 |
11.7.2010, 6:34
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
С рекурсией правильная задумка
Если расписать исходные данные, то они имеют вид
Тут у нас: ["VARn"] - имя параметра VAL_ALONE - одиночное значение без кавычек TABLE - таблица, рекурсивно определённая через себя же а про какие костыли речь то ? Сообщение отредактировал Алексей1153 - 11.7.2010, 9:17 |
|
|
alien |
11.7.2010, 13:51
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 10.7.2010 Пользователь №: 1876 Спасибо сказали: 0 раз(а) Репутация: 0 |
Костыли вот они.
hastable=0; if(!fromTbl) parent << parent.last()->child(parent.last()->childCount()-1); if(!columnData.isEmpty()) parent.last()->appendChild(new TreeItem(columnData, parent.last())); if(!fromTbl) setupModelDataRec(*iter,parent,true); else setupModelDataRec(*iter,parent,false); if(!fromTbl) parent.pop_back(); Просто чтобы было возможно делать вот такое например CODE {["name"]="Item 50367",["value"]= { {["name"]="Slot",["value"]={{["name"]="Test",["value"]=5}}}, Тоесть приходится делать таблицу в таблице даже если она одна. Чтобы можно было делать вот так CODE {["name"]="Item 50367",["value"]= { {["name"]="Slot",["value"]={{["name"]="Test",["value"]=5},{["name"]="Test",["value"]=5}}}, Для этого пришлось сделать дополнительный параметр bool fromTbl Дальше переменная hastable; тоже костыль тот еще. Тоесть если эта таблица то п выходу из рекурсии не нужно делать if(hastable) parent.last()->appendChild(new TreeItem(columnData, parent.last())); Как бы это получше записть |
|
|
Iron Bug |
11.7.2010, 15:24
Сообщение
#4
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
не знаю насчёт реализации в QT, но вообще подобные задачи на практике решаются в виде одной таблицы типа OBJECT, в которой у каждой записи кроме уникального идентификатора и пользовательских значений есть ещё поле PARENT, если PARENT - нулевой, то объект - внешний, конечный. а если ненулевой, то он должен указывать на идентификатор другой записи в этой же таблице и содержит свойство родительского объекта. это вид отображения деревьев в БД при этом обрабатывается всё рекурсией.
многократно реализовывали такие таблицы в реальной жизни. просто и удобно. |
|
|
Алексей1153 |
11.7.2010, 16:38
Сообщение
#5
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
А, ну если речь про класс-дерево, то вот пример (из рабочего проекта выдрано, немного подредактировано, поэтому может с ходу не скомпилиться )
заголовок Раскрывающийся текст
реализация Раскрывающийся текст
пример заполнения Раскрывающийся текст
Сообщение отредактировал Алексей1153 - 11.7.2010, 16:38 |
|
|
Текстовая версия | Сейчас: 2.12.2024, 10:50 |