2017-08-30 7 views
0

Je ne parviens pas à connecter un signal à un emplacement dans le code suivant:QT Connect emplacement/signal ne fonctionne pas

#include "myserver.h" 

MyServer::MyServer(QObject *parent) : 
    QTcpServer(parent) 
{ 
} 

void MyServer::StartServer() 
{ 
    if(listen(QHostAddress::Any, 45451)) 
    { 
     qDebug() << "Server: started"; 
     emit servComando("Server: started"); 
    } 
    else 
    { 
     qDebug() << "Server: not started!"; 
     emit servComando("Server: not started!"); 
    } 
} 

void MyServer::incomingConnection(int handle) 
{ 
    emit servComando("server: incoming connection, make a client..."); 

    // at the incoming connection, make a client 
    MyClient *client = new MyClient(this); 
    client->SetSocket(handle); 

    //clientes.append(client); 
    //clientes << client; 

    connect(client, SIGNAL(cliComando(const QString&)),this, SLOT(servProcesarComando(const QString&))); 

    // para probar 
    emit client->cliComando("prueba"); 

} 

void MyServer::servProcesarComando(const QString& texto) 
{ 
    emit servComando(texto); 
} 

Les emit client->cliComando("prueba"); œuvres, mais le vrai « émet » ne le font pas. La console ne montre aucune erreur de connexion, et les textes QDebug montrent que tout fonctionne bien. Code d'origine a été copié à partir http://www.bogotobogo.com/cplusplus/sockets_server_client_QT.php

+0

Montrez-nous votre code de gestion de signal. – arrowd

+0

_Le client d'émission-> cliComando ("prueba"); works_ Comment le savez-vous? En outre, vous pouvez simplement connecter SIGNAL à SIGNAL: _connect (client, SIGNAL (cliComando (const QString &)), ceci, SIGNAL (servComando (const QString &))); _ – Xplatforms

+0

Aussi _ "prueba" _ utilisé comme argument n'est pas évidemment _const QString & _ it Utilise _QStringLiteral ("prueba") _ Et affecte l'argument SIGNAL/SLOT à _const QString_ si vous insérez l'argument directement dans le corps de la fonction et que vous ne savez pas si le paramètre instancié dans le processus QMeta est toujours disponible et a la valeur – Xplatforms

Répondre

0

J'ai trouvé le problème, Im envoie un signal avant la connexion:

client->SetSocket(handle); 

envoie le signal, et Im après ... connectez Maintenant, il est:

// at the incoming connection, make a client 
MyClient *client = new MyClient(this); 

connect(client, SIGNAL(cliComando(const QString&)),this, SLOT(servProcesarComando(const QString&))); 

client->SetSocket(handle); 

Et cela fonctionne. Je l'ai remarqué après avoir lu ce qui suit:

13. Mettez toutes les instructions de connexion avant les appels de fonctions qui peuvent déclencher leurs signaux, pour s'assurer que les connexions sont faites avant que les signaux ne soient déclenchés. Par exemple:

_myObj = new MyClass(); 
connect(_myObj, SIGNAL(somethingHappend()), SLOT(doSomething())); 
_myObj->init(); 

pas

_myObj = new MyClass(); 
_myObj->init(); 
connect(_myObj, SIGNAL(somethingHappend()), SLOT(doSomething())); 

Je l'ai trouvé à https://samdutton.wordpress.com/2008/10/03/debugging-signals-and-slots-in-qt/

Quoi qu'il en soit, merci pour vos réponses!