Russian Qt Forum

Qt => Вопросы новичков => Тема начата: qwyllum от Март 23, 2013, 17:27



Название: Редактор уровней. Классы
Отправлено: qwyllum от Март 23, 2013, 17:27
Пишу простейший редактор уровней. Есть главный диалог, на котором будет отображаться уровень и будут различные кнопки, типа создать объект и т.п. Добавил диалог создания уровня(AddLevelDlg). Для простоты пока уровень содержит три параметра
Код:
class Clevel
{
 int width, height,
QString name;
}


Что у нас получается. Есть главный диалог, который содержит переменную класса 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
Зачем что-то держать и копировать?

1 главный, 1 диалог, 1 уровень.

У главного вызов диалога, обработка полученных от диалога данных и указатель на уровень.

У диалога - возврат после нажатия OK параметров.

У уровня - функция создания объектов при помощи фабрики.
Я думал, что дочерний диалог будет создавать уровень в on_buttonBox_accepted(). А тут...вопрос в том, как передать эти данные. Когда пользователь нажмет ОК на диалоге создания уровня произойдет событие on_buttonBox_accepted(). Или при событии мне отправлять сигнал главному диалогу о создании уровня?


Название: 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
если с уровнем вы работаете только посредством главного окна (и его дочерних диалогов), сделайте уровень членом класса главного окна. в дочерние диалоги можете передавать указатель на объект уровня, либо просто запрашивать у них параметры, модифицируя уровень в главном окне. если после изменения параметров уровня требуется перерисовка всего уровня или его части, уровень должен сообщать об этом посредством сигнала, на который все заинтересованные объекты будут реагировать.