Bonjour,
Toujours dans le cadre de mon projet BTS, je dois parvenir à passer un argument de type objet à un slot relié à un signal. Mais ça marche pas![]()
Je m'explique, le projet est un client - serveur dont le serveur est développé sous Qt 5.0.1. Une fois la connexion accepté, le slot connexion est appelé via le signal newConnexion.
Nota : en réalité, les clients du système sont des serveurs de production mais pour éviter la confusion, je les appele des clients pour mon projet.
Le slot connexion gère une connexion d'un client au serveur. Chaque client est représenté par un objet contenant son nom, son adresse IP, ... cet objet est instancié dans le slot et il y a autant d'objet que de client connecté.
Dans la suite du slot, le slot donnees est appelé via le signal readyRead.
Le slot donnees permet de gérer la réception du message envoyé par le client mais je voudrai passer à ce slot l'objet du client instancié précédement.
Seul problème, pour passer un argument à un slot, il faut que le signal accepte le même type d'argument et c'est là où je coince![]()
J'ai déjà essayé d'appeler un signal personnalisé mais ça ne marche pas :/
De l'aide me serai du plus grand secours !
Voici le code :
widget.h
widget.cpp
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 namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT Base bdd; QTcpServer *serveur; bool etatEcoute; QList<QTcpSocket *> serveurs; static int nbre; public: explicit Widget(QWidget *parent = 0); ~Widget(); private: int accepterConnexion(); int traitement(Serveur, QString); public slots: void demarrerSurveillance(); void arreterSurveillance(); void connexion(); void donnees(Serveur); void deconnexionServeur(); void changerPort(); void quitter(); signals: void lecture(Serveur); private: Ui::Widget *ui;
Merci de votre aide
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 Widget::connexion() { ui->etatAppli->setText("Serveur µZ détecté, en attente de réception"); serveur->setProperty("readyRead", "readyRead"); Serveur serv(serveur->nextPendingConnection()); // à cet instant, on sait qu'un serveur s'est connecté mais on ne sait pas qui qDebug("serveur instancier numero : %d", serv.getId()); serveurs << serv.getServeur(); connect(serv.getServeur(), SIGNAL(lecture(Serveur)), this, SLOT(donnees(Serveur))); connect(serv.getServeur(), SIGNAL(disconnected()), this, SLOT(deconnexionServeur())); } void Widget::donnees(Serveur serv) { emit lecture(serv); ui->etatAppli->setText("Réception des données en cours"); //QString trame = 0; // ... après réception de la trame //traitement(serv, trame); }![]()
Partager