Название: Редактор уровней. Классы Отправлено: qwyllum от Март 23, 2013, 17:27 Пишу простейший редактор уровней. Есть главный диалог, на котором будет отображаться уровень и будут различные кнопки, типа создать объект и т.п. Добавил диалог создания уровня(AddLevelDlg). Для простоты пока уровень содержит три параметра
Код: class Clevel Что у нас получается. Есть главный диалог, который содержит переменную класса AddLevelDlg и при необходимости(пользователь нажал кнопку создать уровень) этот диалог показывается (addleveldlg.Show() ) Пользователь вводит имя, размеры и жмет ОК. Происходит событие addleveldlg.on_buttonBox_accepted() и по идее должен создаваться уровень. А теперь с-но вопрос - как выстроить классы? С одной стороны главный диалог будет отображать уровень(для простоты он будет пока просто рисовать черный квадрат заданных размеров). С другой стороны, дочерний диалог обрабатывает нажатие кнопки OK и там должно происходить создание уровня. Т.е. и главный класс и дочерний должны иметь доступ к классу CLevel. Конечно можно у обоих классов создать объект класса CLevel и копировать из одного в другой, но мне не совсем понятно, как мне передать объект. И есть еще интересный вопрос - со временем класс CLevel разрастется и будет содержать много параметров и вряд ли такой способ целесообразен. Подскажите пожалуйста, как лучше сделать. Название: Re: Редактор уровней. Классы Отправлено: Bepec от Март 23, 2013, 19:24 Зачем что-то держать и копировать?
1 главный, 1 диалог, 1 уровень. У главного вызов диалога, обработка полученных от диалога данных и указатель на уровень. У диалога - возврат после нажатия OK параметров. У уровня - функция создания объектов Название: Re: Редактор уровней. Классы Отправлено: qwyllum от Март 23, 2013, 19:33 Зачем что-то держать и копировать? Я думал, что дочерний диалог будет создавать уровень в on_buttonBox_accepted(). А тут...вопрос в том, как передать эти данные. Когда пользователь нажмет ОК на диалоге создания уровня произойдет событие on_buttonBox_accepted(). Или при событии мне отправлять сигнал главному диалогу о создании уровня?1 главный, 1 диалог, 1 уровень. У главного вызов диалога, обработка полученных от диалога данных и указатель на уровень. У диалога - возврат после нажатия OK параметров. У уровня - функция создания объектов Название: Re: Редактор уровней. Классы Отправлено: Bepec от Март 23, 2013, 20:03 А вы напишите алгоритм и представьте что вы хотите сделать. Мб не стоит добавлять диалог? Посмотрите как сделано в Qt Designer'e. Форма и компоненты. Всё спокойно перетаскивается и никаких диалогов.
Название: Re: Редактор уровней. Классы Отправлено: Igors от Март 24, 2013, 10:04 Ну почему бы не создать QList <Clevel>. Дочернее окно знает напр QList и индекс "своего" элемента, может удалить его из QList
Название: Re: Редактор уровней. Классы Отправлено: qwyllum от Март 24, 2013, 11:47 А вы напишите алгоритм и представьте что вы хотите сделать. Мб не стоит добавлять диалог? Посмотрите как сделано в Qt Designer'e. Форма и компоненты. Всё спокойно перетаскивается и никаких диалогов. В общем суть такая: есть главное окно, есть дочерний диалог создания уровня и есть сам уровень. Я прописал все три объекта в main.cpp, т.е. сделал их глобальными.1. Пользователь жмет кнопку [Создать уровень] срабатывает событие(я сделал это пересылкой сигнала дочернему диалогу) 2. Открывается дочерний диалог с параметрами 3. После нажатия на кнопку [OK] создается уровень(отсылается сигнал объекту Level) тут пока все хорошо, кроме одного - мне необходимо постоянно отрисовывать уровень. Отрисовка происходит в PaintEvent главного диалога. Отсюда вопрос - как получать данные от уровня для отрисовки? Постоянно посылать сигнал со всеми данными уровня главному окну? Или все-таки лучше сделать CLevel членом класса главного диалога? Название: Re: Редактор уровней. Классы Отправлено: Bepec от Март 24, 2013, 12:06 Думаю стоит почитать ми сообщения. Как Я себе то представляю - я уже написал.
Название: Re: Редактор уровней. Классы Отправлено: Странник от Март 25, 2013, 10:26 если с уровнем вы работаете только посредством главного окна (и его дочерних диалогов), сделайте уровень членом класса главного окна. в дочерние диалоги можете передавать указатель на объект уровня, либо просто запрашивать у них параметры, модифицируя уровень в главном окне. если после изменения параметров уровня требуется перерисовка всего уровня или его части, уровень должен сообщать об этом посредством сигнала, на который все заинтересованные объекты будут реагировать.
|