Russian Qt Forum
Ноябрь 23, 2024, 21:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: TreeView модель на основе нескольких таблиц базы данных  (Прочитано 3524 раз)
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?

много еще вопросов...но пока хотелось бы разобраться с этими. Как рациональнее поступить? что взять за основу?
« Последнее редактирование: Июль 25, 2011, 22:36 от chirkov_slava » Записан
sergun1604
Гость
« Ответ #1 : Август 26, 2011, 08:58 »

Мощь слава!
у тебя быстрый ум!
А если серьезно то что ты написал целое ТЗ
и никто наверняка с тобой эту прогу писать не будет.
Записан
blakvoron
Гость
« Ответ #2 : Сентябрь 12, 2011, 07:24 »

Слав, я конечно когда ТЗ начал делать то же по сайтам лазил, но полностью переписать ТЗ - это мощь!
ГК АДЕПТ рулит!))))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 20.