![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
explorer85 |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 18.3.2011 Пользователь №: 2517 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
ЗАДАДЧА.
Исходные данные: Есть две сущности 1. Задача
2. Проект
Эти сущности можно добавлять в списки QVector <Task> tasks; QVector <Project> projects; Причем при добавлении Задачи в tasks мы указываем ей ProjectID что указывает на ее принадлежность к проекту с таким же ProjectID при добавлении Проекта в projects мы указываем ему ProjectID. Таким образом получается иерархическая связь на верхнем уровне проекты на нижнем уровне задачи. У одного проекта может быть несколько задач. Задача одновременно может находится только в одном проекте. НУ вобщем я думаю понятно двухуровневое дерево получается проекты родители, задачи дети. ----------------------------------------------------------- Необходимо реализовать GUI для работы со списками этих сущностей. ----------------------------------------------------------- Реализовать интерфейс ввода необходимо следующим образом, в двух видах: 1. Двухуровневое дерево проектов и задач. Проект1 Задача 1 Задача 2 Проект2 Задача 3 Без проекта Задача 4 Здесь можно добавить проект, удалить проект, отредактировать проект Здесь можно добавить задачу к проекту, удалить задачу из проекта, отредактировать задачу. Проект "Без проекта" отредактировать и удалить нельзя (он создается приложением автоматически чтобы было куда добавлять задачи во втором виде) 2. Список задач. Задача 1 Задача 2 Задача 3 Задача 4 Здесь можно добавить задачу, отредактировать задачу, удалить задачу При создании задачи в этом виде она попадает в проект "Без проекта" Вопрос как это сделать с помощью mvc фреймворка qt?????? PS: Сразу скажу я эту проблему решил но на свой взгляд криво, и не уверен в правильности решения, и некоторые вещи у меня не работают. PPS: Если кому интересно выложу здесь свои свои решения у меня их 2 одно реализовано криво другое не реализовано есь только идея. PPPS: Очень надеюсь на помощь людей которые считают себя реально прокаченными в MVC ...и вообще всех homosapiens)) |
|
|
![]() |
Алексей1153 |
![]()
Сообщение
#2
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Хотя интересно как там сделано)) да очень просто всё сделано (кхм, если работу с АПИшными Tree View и List View можно вообще назвать простыми. Это ад! Но ад программистский, а не логический) - я делал такую вещь для одной из программ (не на Qt). Главное: отделить GUI от логики и от данных. Окно лишь показывает текущее состояние данных, а также позволяет ввести новые данные (для создания нового элемента либо для замены содержимого существующего). После изменения данных окно должно перерисоваться, чтобы показать текущее содержимое данных. Под перерисовкой понимается не принудительная перерисовка всего, а, возможно, перерисовка только необходимой части окна для отображения изменений. Но само окно понятия не имеет, что поменялось! Даже несмотря на то, что именно окно помогло ввести данные. Хранилищем окно не управляет - оно передало введённую информацию и забыло. Перерисовалось. Типа - "я сделало всё, что могло, сотрите, что теперь в данных". Оба окна не зависят друг от друга. Они зависят от данных. А то, как сортировать, это уже просто - выводят содержимое данных в том виде, в каком пользователь попросил. Цитата зачем таймер если есть сигналы и слоты если получится - пожалуйста. но я бы не стал городить сложную систему оповещений там, где она не нужна. По опыту знаю, что в данном случае проверка по таймеру - достаточно. И сильно упрощает. Если непонятно рассказываю, могу схемку накидать )) Цитата какое я щас вижу решение? делать еще одну связку модель + представление + делегат, передавать модели указатель на Storage с данными .........ну итд. То есть получается некислое дублирование кода, рост сложности кода проекта ну итд со всеми вытекающими.... И таймер вновь спешит на помощь ![]() Кстати говоря, таймер то таймером, он обновит раз в секунду, что нормально для обновления вида других окон (не в фокусе), но не очень то для текущего окна (сказали сортировать - а оно отреагировало через секунду...) . Тут делаем так: то, что вызывается в обработчике таймера для обновления окон, надо иметь возможность вызвать в любой момент. Увеличили счётчик вхолостую, вызвали процедуру. Дальше всё по накатанной Сообщение отредактировал Алексей1153 - 4.8.2011, 11:31 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 3.6.2025, 22:22 |