LINUX.ORG.RU

QT. Редактор карт.

 , ,


0

1

Пишу простейший редактор уровней. Есть главный диалог, на котором будет отображаться уровень и будут различные кнопки, типа создать объект и т.п. Добавил диалог создания уровня и класс самого уровня Для простоты пока уровень содержит три параметра

class Clevel
{
 int width, height,
QString name;
}

Надо отметить, что уровень должен отрисовыватся в главном окне, правда пока для простоты это будет черный квадратик. Итак, как я это попытался реализовать:

Я прописал все три объекта в main.cpp, т.е. сделал их глобальными. 1. Пользователь жмет кнопку [Создать уровень] срабатывает событие(я сделал это пересылкой сигнала дочернему диалогу) 2. Открывается дочерний диалог с параметрами 3. После нажатия на кнопку [OK] создается уровень(отсылается сигнал объекту Level)

тут пока все хорошо, кроме одного - мне необходимо постоянно отрисовывать уровень. Отрисовка происходит в PaintEvent главного диалога. Отсюда вопрос - как получать данные от уровня для отрисовки? Постоянно посылать сигнал со всеми данными уровня главному окну? Или все-таки лучше сделать CLevel членом класса главного диалога? Подскажите пожалуйста

Гонять туда сюда сигналами большие объекты не стоит. Лучше сделай объект-уровень QObject'ом, напиши ему сигнал вроде void clevelChanged() и кидай его всякий раз когда объект-уровень меняется (что сделать довольно просто, если убрать все члены класса в private, а доступ к ним осуществлять через специальные члены-функции). Твой главный «диалог» должен содержать указатель на уровень (но при этом владеть уровнем он не должен) и принимать соответствующий сигнал. Если уровень изменился — перерисовываем его.

KblCb ★★★★★ ()

Отрисовка происходит в PaintEvent главного диалога

Вы там городите свою рисовалку, вместо того чтобы взять QGraphicsScene?

no-such-file ★★★★★ ()

Постоянно посылать сигнал со всеми данными уровня главному окну?

Хранить где-то придётся до вызова paintEvent.

Или все-таки лучше сделать CLevel членом класса главного диалога?

Да.

Почитай ещё что-нибудь про ООП и ОО-анализ, желательно Гради Буча - у него лучше всего объясняется, как строить приложения из объектов.

schizoid ★★★ ()

QT? Уверен? Если по теме, как ты рисуешь уровень? Заведи функцию mapChanged() и долби её когда что-то меняется. Все данные о карте должны быть у объекта, который рисует карту, иначе уж очень много тебе посылать.

BruteForce ★★★ ()

Редактируемый уровень должен быть членом класса окна, которое его отоброжает/редактирует.

trex6 ★★★★★ ()

Если карта тайловая, то используй QGraphicsScene и QGraphicsView, а они сами разберутся что, как и когда отрисовывать.

static_lab ★★★★★ ()
Ответ на: комментарий от unC0Rr

Или если векторная

Или вообще, любая 2D карта. ТС, похоже, давно педали не крутил... соскучился.

no-such-file ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.