Bonjour à tous!
J'expérimente Qt depuis 2 semaines et j'ai un problème.
J'ai abordé le tutoriel de trolltech sur les signals et les slots.
Voici ma situation, j'écris un petit chat.
À la connexion avec le serveur, le client lance un thread pour gérer la réception de messages.
Comme il semble impossible de toucher au gui dans mon thread, je tente de créer 2 signals et 2 slots qui y sont ratachées.
Des détails:
- Le nom de la classe qui contient ma fonction de thread est qtsock.cpp
- La slot appelé se trouve dans le qtclient2007Widget.cpp
Le code associé:
qtsock.h:
Dans le thread, j'ai simplement;
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 class qtsock : public QObject { Q_OBJECT public: qtsock(); ~qtsock(); int CreateSock(const char * ip); bool sendsock(char * msg); static void * TalkThread( void * SocketConnexion); signals: void NewMessage(); void NewClient(); private: /* Variables globales */ int DestSock; struct sockaddr_in destSockAddr; bool endsock(); };
Le qtclient2007Widget.cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part emit NewMessage();
Le qtclient2007Widget.h:
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 void qtclient2007Widget::btnConnect_clicked() { /* Variables */ //qtsock cQtSock; QString Nick; QString Ip; int SocketConnexion; int result; /* Identifiant du thread */ pthread_t thread_id; connect(&cQtSock, SIGNAL( NewMessage() ), &qtclient2007Widget, SLOT( AddMsgToTextbox() )); connect(&cQtSock, SIGNAL( NewMessage() ), &qtclient2007Widget, SLOT( AddNicknameToList() )); ... } void qtclient2007Widget::AddMsgToTextbox() {} void qtclient2007Widget::AddNicknameToList() {}
À la compilation j'obtiens cette erreur:
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 class qtclient2007Widget : public qtclient2007WidgetBase { Q_OBJECT public: qtclient2007Widget(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); ~qtclient2007Widget(); /* Variables */ qtsock cQtSock; public slots: /*$PUBLIC_SLOTS$*/ virtual void btnEnvoie_clicked(); virtual void btnConnect_clicked(); virtual void AddMsgToTextbox(); virtual void AddNicknameToList(); protected: /*$PROTECTED_FUNCTIONS$*/ protected slots: /*$PROTECTED_SLOTS$*/ };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 /home/shaika-dzari/QT/qtclient2007/src/qtclient2007widget.cpp: In member function virtual void qtclient2007Widget::btnConnect_clicked(): /home/shaika-dzari/QT/qtclient2007/src/qtclient2007widget.cpp:54: error: expected primary-expression before , token /home/shaika-dzari/QT/qtclient2007/src/qtclient2007widget.cpp:55: error: expected primary-expression before , token gmake[2]: *** [qtclient2007widget.o] Erreur 1 gmake[2]: quittant le répertoire « /home/shaika-dzari/QT/qtclient2007/debug/src » gmake[1]: *** [all-recursive] Erreur 1 gmake[1]: quittant le répertoire « /home/shaika-dzari/QT/qtclient2007/debug » gmake: *** [all] Erreur 2 *** Sortie avec l'état : 2 ***
À noter j'effectue le connect lorsque mon bouton connexion est pressé.
Dois-je effectué le connect ailleurs?
N'hésiter pas à me signalerles erreurs ou à donner vos remarques.
![]()
Partager