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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Общение между двумя объектами!  (Прочитано 11285 раз)
Racot
Гость
« Ответ #15 : Апрель 14, 2012, 17:39 »

Цитировать
class MainWindow2; // тут должен быть "противоположный" класс

а я думал что если хедер вставил то и объявлять не надо класс.....

Всем спасибо! помогло!!!!!!!
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #16 : Апрель 14, 2012, 18:24 »

вот как раз хедер лучше подключать не в .h, а в .cpp
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Racot
Гость
« Ответ #17 : Апрель 14, 2012, 18:50 »

и то верно Смеющийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #18 : Апрель 15, 2012, 10:00 »

Решение сохранять указатели будет работать, но оно немногим лучше глобальных переменных. В обоих случаях 2 класса "знают" друг о друге, образуется "зависимость". Пока задача достаточно проста все нормально. Но предположим появился MainWindow3, т.е. переключаться надо уже между 3 формами. Переделать указатели будет совсем не легко.

Более капитальное (и правильное) решение указал kambala. Просто можно не спешить с классом-менеджером, а пока сделать так

- кнопки в окнах испускают сигналы
- в main (пока) эти сигналы связываются со слотами hide/show окон

Когда возникнет необходимость в более сложном переключении - мы свяжем сигналы уже с чем-то другим (там видно будет), но нам не придется кромсать  MainWindow1(2, 3)
Записан
alexis031182
Гость
« Ответ #19 : Апрель 15, 2012, 10:44 »

...
Более капитальное (и правильное) решение указал kambala. Просто можно не спешить с классом-менеджером, а пока сделать так

- кнопки в окнах испускают сигналы
- в main (пока) эти сигналы связываются со слотами hide/show окон
...
Кнопки на формах, а значит любую из них нельзя подключить к "противостоящей" форме. Соответственно, только через самопальные сигналы форм. Впрочем, труда здесь безусловно немного.
Записан
Racot
Гость
« Ответ #20 : Апрель 17, 2012, 20:45 »

Гм.........я уже думал что "познал смысл жизни".......но Igors (похоже что умный мужик) опять меня запутал. А как делается там где нет сигналов и слотов(не в QT)Непонимающий Я просто не силён в ООП и хотел добраться до истины - "как делается это у нормальных людей?". Наверняка это тривиальная задача сделать интерфейс из нескольких главных окон(которая проделывалась тысячи раз тысячами людьми).
И я почти был уверен что это делается средствами ООП и C++(это же просто общение двух объектов).
Записан
Tonal
Гость
« Ответ #21 : Апрель 18, 2012, 09:50 »

Сигналы/слоты тоже не содержат ничего магического. Там указатели на объекты и их функции. Просто в рамках Qt это автоматизировано с помощью дополнительных ключевых слов и генерации кода - специализированного препроцессора.

В чистом С/С++ весь этот код нужно писать руками. Правда есть некоторое количество библиотек сокращающих писанину. Улыбающийся

В Qt можно придерживаться простого правила:
Дочерний виджет не знает интерфейса родителя, а родительский знает интерфейс дочернего.
Это приводит к тому, что дочерний посылает сигналы, когда ему есть, что сказать, а родительский вызывает функции дочерних, когда ему это зачем-то нужно. Улыбающийся
Т. е. родительский выступает для своих дочерних менеджером, о котором писал kambala.
Иногда, можно в родительском просто связать сигнал/слоты дочерних, иногда требуется какая-то более сложная обработка.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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