Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: vunder от Октябрь 08, 2010, 20:10



Название: Сигналы и слоты
Отправлено: 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() - нет. Никак не могу разобраться, в чем дело


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


Название: Re: Сигналы и слоты
Отправлено: vunder от Октябрь 08, 2010, 20:29
Ошибся с кодом, объявление там конечно же есть. Шапку поправил