Salut !
Petit problème de signaux jamais reçus...
Dans un thread (classe dérivée de QThread) je lance une connexion réseau avec QTcpSocket, que j'ai préalablement connecté à des slots sur mon thread. En fait j'ai suivi l'exemple de la doc Qt pour la classe QThread.
Hors, je ne reçois jamais de notification de la part de QTcpSocket, malgré le fait que j'ai fait les connexions en mode "queued_connection".
Voici le code de ma classe dérivée de QThread :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "sirifserver.h"
 
SirifServer::SirifServer(int port, const QHostAddress& address, const QString& name, QObject* pParent):QThread(pParent)
{
   m_IpAddress = address;
   m_QStrName = name;
   m_Port = port;
}
 
 
/** main loop of the thread */
void SirifServer::run()
{
   connect( &m_TcpSocket,
            SIGNAL(error(QAbstractSocket::SocketError)),
            this,
            SLOT(error(QAbstractSocket::SocketError)),
            Qt::QueuedConnection );
 
   connect( &m_TcpSocket,
            SIGNAL(stateChanged(QAbstractSocket::SocketState)),
            this,
            SLOT(stateChanged(QAbstractSocket::SocketState)),
            Qt::QueuedConnection );
 
   // Launch the connection
   m_Mutex.lock();
   if ( m_QStrName.length() )
      m_TcpSocket.connectToHost( m_QStrName, m_Port );
   else
      m_TcpSocket.connectToHost( m_IpAddress, m_Port );
   m_Mutex.unlock();
   exec();
}
 
void SirifServer::connectToRemote()
{
   // Check if the thread is already launch, if not launched, launch it now
  if ( !isRunning() )
      start();
}
 
/** This Qt signal is emitted by the QTcpSocket. */
void SirifServer::error(QAbstractSocket::SocketError ErrorValue)
{
   emit error( m_QStrName, ErrorValue );
}
 
/** This Qt signal is emitted by the QTcpSocket. */
void SirifServer::stateChanged( QAbstractSocket::SocketState State)
{
   emit stateChanged( m_QStrName, State );
}
normalement les signaux devraient être reçus dans les fonctions error() et stateChanged(), mais je ne reçois rien.
Par contre, si je place la déclaration des connections et l'appel à connectToHost() dans le constructeur de la classe SirifServer() (donc dans le thread principal) alors là, je reçois bien les signaux.
On dirait que les signaux ne passe pas les thread....

Des idées ? parce que là, je sèche.
:-\