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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: связь между классами ?  (Прочитано 5454 раз)
remiznik
Гость
« : Июль 29, 2008, 06:06 »

Есть большой проект и есть главный класс А соответственно А.срр и А.h !Есть подчиненный класс В он создается внутри А , но и у него есть подчиненный класс который создается внутри него С ! вопрос  как при изменение каких-то параметров класса С изменить параметры класса А ?  все классы в отдельных файлах !!!

Примечание: A B C  это окна и соответственно А главное оно вызывает В ! а B уже вызывает С и должно изменять параметры объекта    "a" созданного классом А.
Код:
//A.h
#include "B.h"
A::A()          //конструктор класа А
{
        B *b;  //определяем что будет создан обьект класса В
}
//B.h
#include "C.h"
B::B() // конструктор класа В
{
        C *c; //определяем что будет обьект класа С
}
   
Записан
ритт
Гость
« Ответ #1 : Июль 29, 2008, 06:40 »

эээ...мммм...*Непонимающий
*указатели
*сигналы
*события
Записан
Red Devil
Гость
« Ответ #2 : Июль 29, 2008, 10:25 »

Если используюется Qt (а судя по разделу именно так), то легче всего использовать сигналы.
В классе С определяешь сигнал, типа ValueChanged(int nValue) (или вообще можно ссылку на самого себя передать, что можно было любые методы класса дергать). В классе С, там где нужно уведомить класс А пишешьт emit ValueChanged(nValue).
Теперь нужно добавить слот в класса А, предположим ValueChanged(int nValue), и в каком-то месте программы связать их.
Я бы связывание сделал в классе B - т.к. он может получить указатель на класс (при создании), и класс он владеет классом С.
connect(pClassC, SIGNAL(ValueChanged(int)), pClassA, SLOT(ValueChanged(int)));
Записан
developer
Гость
« Ответ #3 : Июль 29, 2008, 15:13 »

Кажеться в куте вложенные класси не поддержывают сигналы и слоты. Нужнопридумать хороную архитектуру. И по моему такой уровень вложености означает - непродуманная архитектура.
Записан
neosapient
Гость
« Ответ #4 : Июль 29, 2008, 18:53 »

Поскольку главный класс А, то логично настраивать сигналы именно в этом классе


connect(this,  SIGNAL(A_signaled()),   B,  SLOT(B_sloting()));
connect(C,  SIGNAL(C_signaled()),   this,  SLOT(A_sloting()));
Записан
SASA
Гость
« Ответ #5 : Август 11, 2008, 18:06 »

Полностью согласен с Red Devil. У меня тоже много уровневая архитектура. Связывание signal/slot в классе B вполне логично, и понятно. А из того что класс А главный не следует то, что он должен знать о потомках своего потомка и заботиться о связывании.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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