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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Взаимодействие классов  (Прочитано 5430 раз)
DoZENT
Гость
« : Ноябрь 03, 2008, 17:08 »

Добрый день! Такая проблема: есть класс MyServer (QObject) и есть класс MyClass (QMainWindow). В классе MyServer происходят различные события (клиент подключился или ошибка соединения вылезла). Мне надо передать в класс MyClass сигнал об этом событии. Как это сделать?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Ноябрь 03, 2008, 17:19 »

1) Создать соответствующие сигналы в MyServer
2) Создать слоты в MyClass для обработки этих сигналов
3) Создать коннекты сигналов-слотов

Когда произойдет то или ное событие в MyServer, испускаеться сигнал и обрабатываеться слотом в MyClass
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
DoZENT
Гость
« Ответ #2 : Ноябрь 03, 2008, 18:27 »

Делаю так:

MyServer:
signals:
    void MySignal ();

В функции старта сервера:

emit (MySignal());

В MyClass:
public slots:
   void MySlot ();

void MyServer::MySlot()
{

   AddLogString("It works fine!");

}

и соедниняю сигнал со слотом:

connect (m_mainServer, SIGNAL (m_mainServer->MySignal()),
         SLOT (MySlot()) );

Ничего не происходит  Грустный
« Последнее редактирование: Ноябрь 03, 2008, 18:31 от DoZENT » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Ноябрь 03, 2008, 18:44 »

в MyClass слот должен быть:
void MyClass::MySlot()
{

   AddLogString("It works fine!");

}

соеденяешь так:
connect (указатель_на_экземпляр_класса_с_сигналом, SIGNAL (MySignal()), указатель_на_экземпляр_класса_со_слотом,  SLOT (MySlot()) );

почитай справку на русском
« Последнее редактирование: Ноябрь 03, 2008, 18:46 от lit-uriy » Записан

Юра.
DoZENT
Гость
« Ответ #4 : Ноябрь 04, 2008, 13:22 »

спасибо за ссылку! но на англ языке как-то привычнее документацию читать.

Цитировать
ни хрена себе, проблема!
поэтому вопрос и находится в разделе для новичков

Цитировать
в MyClass слот должен быть:
void MyClass::MySlot()
{

   AddLogString("It works fine!");

}
сорри, опечатался, в программе все написано правильно

Цитировать
соеденяешь так:
connect (указатель_на_экземпляр_класса_с_сигналом, SIGNAL (MySignal()), указатель_на_экземпляр_класса_со_слотом,  SLOT (MySlot()) );

я вызываю

connect (m_mainServer, SIGNAL (m_mainServer->MySignal()), this,
         SLOT (MySlot()) );

из MyClass (основной класс), но все равно ничего не происходит! извините за тупость вопроса)
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Ноябрь 04, 2008, 13:26 »

Нужно не так:

Код:
connect (m_mainServer, SIGNAL (m_mainServer->MySignal()), this, SLOT (MySlot()) );

а вот так:

Код:
connect (m_mainServer, SIGNAL (MySignal()), this, SLOT (MySlot()) );
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
DoZENT
Гость
« Ответ #6 : Ноябрь 04, 2008, 13:46 »

Цитировать
а вот так:
connect (m_mainServer, SIGNAL (MySignal()), this, SLOT (MySlot()) );
спасибо!!! вот же странная эта QT, как ваш код увидел, даже не поверил, что скомпилируется, ведь MySignal по идее находится не в зоне видимости MyClass! QT, похоже, все сигналы со всех классов собирает и делает их публичными, видимыми изо всех классов программы...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Ноябрь 04, 2008, 14:32 »

спасибо!!! вот же странная эта QT, как ваш код увидел, даже не поверил, что скомпилируется, ведь MySignal по идее находится не в зоне видимости MyClass! QT, похоже, все сигналы со всех классов собирает и делает их публичными, видимыми изо всех классов программы...

Советую светаки сходить по вышеприведенной ссылке и почитать про это. Там все описано, есть примеры.

Если не понимать на русском Подмигивающий, вот на английском: http://doc.trolltech.com/4.4/signalsandslots.html
« Последнее редактирование: Ноябрь 04, 2008, 14:44 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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