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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Редактор уровней. Классы  (Прочитано 4366 раз)
qwyllum
Гость
« : Март 23, 2013, 17:27 »

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


Что у нас получается. Есть главный диалог, который содержит переменную класса AddLevelDlg и при необходимости(пользователь нажал кнопку создать уровень) этот диалог показывается (addleveldlg.Show() )
Пользователь вводит имя, размеры и жмет ОК. Происходит событие addleveldlg.on_buttonBox_accepted() и по идее должен создаваться уровень. А теперь с-но вопрос - как выстроить классы?
С одной стороны главный диалог будет отображать уровень(для простоты он будет пока просто рисовать черный квадрат заданных размеров). С другой стороны, дочерний диалог обрабатывает нажатие кнопки OK и там должно происходить создание уровня. Т.е. и главный класс и дочерний должны иметь доступ к классу CLevel. Конечно можно у обоих классов создать объект класса CLevel и копировать из одного в другой, но мне не совсем понятно, как мне передать объект. И есть еще интересный вопрос - со временем класс CLevel разрастется и будет содержать много параметров и вряд ли такой способ целесообразен.

Подскажите пожалуйста, как лучше сделать.
Записан
Bepec
Гость
« Ответ #1 : Март 23, 2013, 19:24 »

Зачем что-то держать и копировать?

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

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

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

У уровня - функция создания объектов при помощи фабрики.
Записан
qwyllum
Гость
« Ответ #2 : Март 23, 2013, 19:33 »

Зачем что-то держать и копировать?

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

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

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

У уровня - функция создания объектов при помощи фабрики.
Я думал, что дочерний диалог будет создавать уровень в on_buttonBox_accepted(). А тут...вопрос в том, как передать эти данные. Когда пользователь нажмет ОК на диалоге создания уровня произойдет событие on_buttonBox_accepted(). Или при событии мне отправлять сигнал главному диалогу о создании уровня?
Записан
Bepec
Гость
« Ответ #3 : Март 23, 2013, 20:03 »

А вы напишите алгоритм и представьте что вы хотите сделать. Мб не стоит добавлять диалог? Посмотрите как сделано в Qt Designer'e. Форма и компоненты. Всё спокойно перетаскивается и никаких диалогов.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Март 24, 2013, 10:04 »

Ну почему бы не создать QList <Clevel>. Дочернее окно знает напр QList и индекс "своего" элемента, может удалить его из QList
Записан
qwyllum
Гость
« Ответ #5 : Март 24, 2013, 11:47 »

А вы напишите алгоритм и представьте что вы хотите сделать. Мб не стоит добавлять диалог? Посмотрите как сделано в Qt Designer'e. Форма и компоненты. Всё спокойно перетаскивается и никаких диалогов.
В общем суть такая: есть главное окно, есть дочерний диалог создания уровня и есть сам уровень. Я прописал все три объекта в main.cpp, т.е. сделал их глобальными.
1. Пользователь жмет кнопку [Создать уровень] срабатывает событие(я сделал это пересылкой сигнала дочернему диалогу)
2. Открывается дочерний диалог с параметрами
3. После нажатия на кнопку [OK] создается уровень(отсылается сигнал объекту Level)

тут пока все хорошо, кроме одного - мне необходимо постоянно отрисовывать уровень. Отрисовка происходит в PaintEvent главного диалога. Отсюда вопрос - как получать данные от уровня для отрисовки? Постоянно посылать сигнал со всеми данными уровня главному окну? Или все-таки лучше сделать CLevel членом класса главного диалога?
Записан
Bepec
Гость
« Ответ #6 : Март 24, 2013, 12:06 »

Думаю стоит почитать ми сообщения. Как Я себе то представляю - я уже написал.
Записан
Странник
Гость
« Ответ #7 : Март 25, 2013, 10:26 »

если с уровнем вы работаете только посредством главного окна (и его дочерних диалогов), сделайте уровень членом класса главного окна. в дочерние диалоги можете передавать указатель на объект уровня, либо просто запрашивать у них параметры, модифицируя уровень в главном окне. если после изменения параметров уровня требуется перерисовка всего уровня или его части, уровень должен сообщать об этом посредством сигнала, на который все заинтересованные объекты будут реагировать.
« Последнее редактирование: Март 26, 2013, 09:19 от Странник » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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