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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сигналы и слоты  (Прочитано 2987 раз)
vunder
Гость
« : Октябрь 08, 2010, 20:10 »

Есть базовый класс, отнаследованный от QThread, который общается с клиентом по TCP с помощью QTcpSocket. Пока я использовал только базовый класс - проблем не было, но когда сделал несколько классов-потомком начались проблемы. Перестал вызываться слот, соединенный с сигналом QThread::finished(). В базовом классе слот срабатывает, а вот в потомках - нет.

В базовом классе описываю
Код
C++ (Qt)
protected slots:
   virtual void onTcpConnected();
   virtual void onThreadStop();
 
Далее в базовом классе
Код
C++ (Qt)
void UnpProtocol::run()
{
   connect(fSocket, SIGNAL(connected()),
           this,    SLOT(onTcpConnected()));
   connect(fSocket, SIGNAL(disconnected()),
           this,    SLOT(onTcpDisconnected()));
   connect(fSocket, SIGNAL(readyRead()),
           this,    SLOT(onTcpReadyRead()));
   connect(fSocket, SIGNAL(error(QAbstractSocket::SocketError)),
           this,    SLOT(onTcpError(QAbstractSocket::SocketError)));
   connect(this,    SIGNAL(finished()), SLOT(onThreadStop()));
   unpConnect();
   exec();
}
 
В потомке делаю так:
Код
C++ (Qt)
protected slots:
   void onTcpConnected();
   void onTcpDisconnected();
   void onThreadStop();
 
protected
 void run();
 
сам код
Код
C++ (Qt)
void UnpClientProtocol::run()
{
   fSocket = new QTcpSocket(this);
   UnpProtocol::run();
   if (timerId)
       killTimer(timerId);
}
 
void UnpClientProtocol::onTcpConnected()
{
   UnpProtocol::onTcpConnected();
   emit needRegistration();
}
 
void UnpClientProtocol::onThreadStop()
{
   if (m_connected)
       unpDisconnect();
}
 

Проблема в том, что слот UnpClientProtocol::onTcpConnected() прекрасно срабатывает, а вот UnpClientProtocol::onThreadStop() - нет. Никак не могу разобраться, в чем дело
« Последнее редактирование: Октябрь 08, 2010, 20:30 от vunder » Записан
MoPDoBoPoT
Гость
« Ответ #1 : Октябрь 08, 2010, 20:26 »

Проблема в том, что слот UnpClientProtocol::onTcpConnected() прекрасно срабатывает, а вот UnpClientProtocol::onThreadStop() - нет. Никак не могу разобраться, в чем дело
Так в описании производного класса нет onThreadStop():
Код
C++ (Qt)
...
protected slots:
   void onTcpConnected();
   void onTcpDisconnected();
   //void void onThreadStop(); <=
...
 
Записан
vunder
Гость
« Ответ #2 : Октябрь 08, 2010, 20:29 »

Ошибся с кодом, объявление там конечно же есть. Шапку поправил
« Последнее редактирование: Октябрь 08, 2010, 20:30 от vunder » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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