Russian Qt Forum

Qt => Вопросы новичков => Тема начата: U.B.M. от Октябрь 19, 2012, 09:06



Название: Сигналы и слоты
Отправлено: U.B.M. от Октябрь 19, 2012, 09:06
Доброго времени суток!

Создаю окно класса MyParent (наследник QMainWindow), там есть кнопка - по нажатию создается окно класса MyChild (наследник QDialog), в диалоговом окошке есть кнопка - возникает вопрос: как по нажатию кнопки в диалоговом окошке поменять название главного окошка, используя сигналы и слоты?

Делал так:

В MyParent в public slots делаю функцию на изменение заголовка, в Mychild привязываю нажатие кнопки к этому слоту. Всё компилируется, но не работает.

Как правильно сделать?

P.S. Перекрестный include - это нормально или не приветствуется?


Название: Re: Сигналы и слоты
Отправлено: U.B.M. от Октябрь 19, 2012, 09:27
Вроде разобрался сам.

Но вопрос про перекрёсный include (в MyParent.cpp #include <MyChild.h> и наоборот) остается в силе. Может из этого что-нить плохое выйти?


Название: Re: Сигналы и слоты
Отправлено: Пантер от Октябрь 19, 2012, 09:31
Плохо делать такие завязки.


Название: Re: Сигналы и слоты
Отправлено: U.B.M. от Октябрь 19, 2012, 09:36
То что плохо - ответ предполагаемый и ожидаемый  :-\
А можно уточнить - чем плохо кроме того что получается трудный к восприятию спагетти-код?

А как правильнее делать? в контексте моего вопроса про изменение заголовка родительского окна по нажатию кнопки дочернего?


Название: Re: Сигналы и слоты
Отправлено: Пантер от Октябрь 19, 2012, 09:38
В MyChild определяешь сигнал void changeHeader (const QString &text) и в MyParent коннектишь этот сигнал на свой слот. В итоге, MyChild ничего не должен знать о MyParent.


Название: Re: Сигналы и слоты
Отправлено: Пантер от Октябрь 19, 2012, 09:39
А можно уточнить - чем плохо кроме того что получается трудный к восприятию спагетти-код?

Чем меньше зависимостей, тем лучше возможность повторного использования кода.


Название: Re: Сигналы и слоты
Отправлено: U.B.M. от Октябрь 19, 2012, 09:44
В MyChild определяешь сигнал void changeHeader (const QString &text) и в MyParent коннектишь этот сигнал на свой слот. В итоге, MyChild ничего не должен знать о MyParent.

Благодарю. Щас попробую  :)