Russian Qt Forum

Qt => Model-View (MV) => Тема начата: chirkov_slava от Июль 25, 2011, 22:09



Название: TreeView модель на основе нескольких таблиц базы данных
Отправлено: chirkov_slava от Июль 25, 2011, 22:09
Здравствуйте! как начинающий программист столкнулся с некоторыми проблемами и не могу самостоятельно решить.
Задача:
На основе имеющейся базы данных нужно написать программу для отображения и редактирования данных.

Структура базы:
 таблица rasc - основная таблица
 таблица koeff - таблица коэффициентов
 stady - таблица стадий
 sostav - таблица состава проекта
 
 Таблицы содержат записи subID и subIDName, которые указывают что таблица содержит вложенную таблицу с индентификатором subID и именем subIDName.
 Например:
 koeff <ID=1, subID=1, subIDName="rasc"> - связана с 1-ой (subID=1) записью в таблице rasc (subIDname="rasc")
 stady <ID=1, subID=1, subIDName="rasc"> - связана с 1-ой (subID=1) записью в таблице rasc (subIDname="rasc")
 sostav <ID=1, subID=1, subIDName="stady"> - связана с 1-ой (subID=1) записью в таблице stady (subIDname="stady")


 
Необходимые требования:
0. программа должна быть написана на Qt 4.*, среда - любая.
1. необходимо написать GUI приложение, которое содержит дерево (QTree), которое заполнено значениями записей таблицы rasc из БД;
2. дерево содержит вложенные ветки (koeff, stady), которые также могут содержать подветки (sostav).
   2.1 элементы дерева стадий (stady) должны содержать все значения и названия коэффициентов стадии (Dolya, Name).
   2.2 элементы дерева коэффициентов (koeff) должны содержать все значения и названия коэффициентов сметы (Dolya, Name);
   2.2 каждый элемент дерева можно удалить, изменить или создать новый.
3. все изменения должны сохраняться в БД.
4. программа должна содержать одну или несколько коллекций (массивы не использовать!).
5. должны поддерживаться операции undo/redo

 
Желательно:
- реализовать многопоточное приложение, т.е. изменение/сохранение параметров не должно останавливать основную программу;

Первое.
Т.к я не разобрался каким образом сделать ячейки с CheckBox'ом в QAbstractItemModel я использовал QStandartItemModel. В качестве элементов которого использовал QStandartItem; при этом чтобы данные отображались в двух колонках мне для каждой строки пришлось создавать по два объекта QStandartItem.
Как сделать так, чтобы один элемент отображал данные в двух колонках сразу?

Второе.
Мне не очень понятно...При запуске программы, она должна создать модель данных. -верно?
Ее я создаю по средствам запросов, с этим все ясно. Должен ли я проходиться по всем веткам дерева и создавать элементы с данными? т.е. когда у меня во вкладке стадии тысяча элементов или больше, нужно ли для них для всех создавать QStandartItem'ы? это очень накладно! ко всему прочему...при начальном запуске программы все вкладки закрыты. Стоит ли сделать создание итомов только по раскрытии вкладок? Я боюсь за нехватку памяти...В базе данных много элементов! Если пооткрывать все вкладки, да еще побаловаться с undo/redo у меня все падает.
Хорошо бы вообще создавать итемы только если они отображаются на экране...мне кажется, это будет очень гиморойно!

Третье.
Не знаю как правильно и безопаснее работать с базой данных. При создании нового элемента, сразу заносить изменения в базу данных? если нет, то как поступить с undo/redo?

много еще вопросов...но пока хотелось бы разобраться с этими. Как рациональнее поступить? что взять за основу?


Название: Re: TreeView модель на основе нескольких таблиц базы данных
Отправлено: sergun1604 от Август 26, 2011, 08:58
Мощь слава!
у тебя быстрый ум!
А если серьезно то что ты написал целое ТЗ
и никто наверняка с тобой эту прогу писать не будет.


Название: Re: TreeView модель на основе нескольких таблиц базы данных
Отправлено: blakvoron от Сентябрь 12, 2011, 07:24
Слав, я конечно когда ТЗ начал делать то же по сайтам лазил, но полностью переписать ТЗ - это мощь!
ГК АДЕПТ рулит!))))