Russian Qt Forum

Qt => Общие вопросы => Тема начата: remiznik от Июль 29, 2008, 06:06



Название: связь между классами ?
Отправлено: 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; //определяем что будет обьект класа С
}
   


Название: Re: связь между классами ?
Отправлено: ритт от Июль 29, 2008, 06:40
эээ...мммм...*???
*указатели
*сигналы
*события


Название: Re: связь между классами ?
Отправлено: Red Devil от Июль 29, 2008, 10:25
Если используюется Qt (а судя по разделу именно так), то легче всего использовать сигналы.
В классе С определяешь сигнал, типа ValueChanged(int nValue) (или вообще можно ссылку на самого себя передать, что можно было любые методы класса дергать). В классе С, там где нужно уведомить класс А пишешьт emit ValueChanged(nValue).
Теперь нужно добавить слот в класса А, предположим ValueChanged(int nValue), и в каком-то месте программы связать их.
Я бы связывание сделал в классе B - т.к. он может получить указатель на класс (при создании), и класс он владеет классом С.
connect(pClassC, SIGNAL(ValueChanged(int)), pClassA, SLOT(ValueChanged(int)));


Название: Re: связь между классами ?
Отправлено: developer от Июль 29, 2008, 15:13
Кажеться в куте вложенные класси не поддержывают сигналы и слоты. Нужнопридумать хороную архитектуру. И по моему такой уровень вложености означает - непродуманная архитектура.


Название: Re: связь между классами ?
Отправлено: neosapient от Июль 29, 2008, 18:53
Поскольку главный класс А, то логично настраивать сигналы именно в этом классе


connect(this,  SIGNAL(A_signaled()),   B,  SLOT(B_sloting()));
connect(C,  SIGNAL(C_signaled()),   this,  SLOT(A_sloting()));


Название: Re: связь между классами ?
Отправлено: SASA от Август 11, 2008, 18:06
Полностью согласен с Red Devil. У меня тоже много уровневая архитектура. Связывание signal/slot в классе B вполне логично, и понятно. А из того что класс А главный не следует то, что он должен знать о потомках своего потомка и заботиться о связывании.