Название: Взаимодействие классов Отправлено: DoZENT от Ноябрь 03, 2008, 17:08 Добрый день! Такая проблема: есть класс MyServer (QObject) и есть класс MyClass (QMainWindow). В классе MyServer происходят различные события (клиент подключился или ошибка соединения вылезла). Мне надо передать в класс MyClass сигнал об этом событии. Как это сделать?
Название: Re: Взаимодействие классов Отправлено: pastor от Ноябрь 03, 2008, 17:19 1) Создать соответствующие сигналы в MyServer
2) Создать слоты в MyClass для обработки этих сигналов 3) Создать коннекты сигналов-слотов Когда произойдет то или ное событие в MyServer, испускаеться сигнал и обрабатываеться слотом в MyClass Название: Re: Взаимодействие классов Отправлено: DoZENT от Ноябрь 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()) ); Ничего не происходит :( Название: Re: Взаимодействие классов Отправлено: lit-uriy от Ноябрь 03, 2008, 18:44 в MyClass слот должен быть:
void MyClass::MySlot() { AddLogString("It works fine!"); } соеденяешь так: connect (указатель_на_экземпляр_класса_с_сигналом, SIGNAL (MySignal()), указатель_на_экземпляр_класса_со_слотом, SLOT (MySlot()) ); почитай справку на русском (http://crossplatform.ru/documentation/qtdoc4.3/signalsandslots.php) Название: Re: Взаимодействие классов Отправлено: DoZENT от Ноябрь 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 (основной класс), но все равно ничего не происходит! извините за тупость вопроса) Название: Re: Взаимодействие классов Отправлено: pastor от Ноябрь 04, 2008, 13:26 Нужно не так:
Код: connect (m_mainServer, SIGNAL (m_mainServer->MySignal()), this, SLOT (MySlot()) ); а вот так: Код: connect (m_mainServer, SIGNAL (MySignal()), this, SLOT (MySlot()) ); Название: Re: Взаимодействие классов Отправлено: DoZENT от Ноябрь 04, 2008, 13:46 Цитировать а вот так: спасибо!!! вот же странная эта QT, как ваш код увидел, даже не поверил, что скомпилируется, ведь MySignal по идее находится не в зоне видимости MyClass! QT, похоже, все сигналы со всех классов собирает и делает их публичными, видимыми изо всех классов программы...connect (m_mainServer, SIGNAL (MySignal()), this, SLOT (MySlot()) ); Название: Re: Взаимодействие классов Отправлено: pastor от Ноябрь 04, 2008, 14:32 спасибо!!! вот же странная эта QT, как ваш код увидел, даже не поверил, что скомпилируется, ведь MySignal по идее находится не в зоне видимости MyClass! QT, похоже, все сигналы со всех классов собирает и делает их публичными, видимыми изо всех классов программы... Советую светаки сходить по вышеприведенной ссылке и почитать про это. Там все описано, есть примеры. Если не понимать на русском ;), вот на английском: http://doc.trolltech.com/4.4/signalsandslots.html |