2010-05-05 7 views
5

La fonction CheckSite() est appelée avec une adresse comme http://example.com, elle initialise un objet QNetworkAccessManager et connecte() des emplacements et des signaux. L'appel de manger-> get() semble fonctionner (il génère un trafic http) mais n'appelle pas le slot replyFinished() à la fin de la requête.Qt QNetworkAccessManager n'émet pas de signaux

Quel est le problème avec ce code?

#include <QtCore> 
#include <QtNetwork> 

class ClientHandler : public QObject 
{ 
Q_OBJECT 
    QNetworkAccessManager *manager; 
private slots: 
    void replyFinished(QNetworkReply *); 
public: 
    void CheckSite(QString url); 
}; 

void ClientHandler::replyFinished(QNetworkReply *reply) { qDebug() << "DONE"; } 

void ClientHandler::CheckSite(QString url) { 
    QUrl qrl(url); 
    manager = new QNetworkAccessManager(this); 
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); 
    manager->get(QNetworkRequest(qrl)); 
} 
+2

Avez-vous trouvé la solution? J'ai le même problème. –

+0

non, je cesse de travailler sur le projet – Emilio

Répondre

1

Rien. J'enveloppai donc il était pleinement fonctionnel et il fonctionne très bien:

// placed in client.cpp 
#include <QtDebug> 
#include <QCoreApplication> 

/* YOUR CODE */ 

int main(int argc, char *argv[]) 
{ 
     QCoreApplication app(argc, argv); 
     ClientHandler handler; 
     handler.CheckSite("www.google.com"); 
     return app.exec(); 

} 

#include "client.moc" 

Il sortie « DONE » comme prévu. Peut-être que le site que vous vérifiez ne revient pas vraiment? Peut-être qu'il faut authentication ou produit ssl errors?

+0

Devrais-je inclure le fichier moc dans mon fichier source principal()? – Emilio

+0

Le '#include" client.moc "' n'est nécessaire que lorsque vous n'avez pas défini votre classe dans un fichier d'en-tête (et que vous utilisez 'qmake' comme outil de construction). Comme j'avais tout dans client.cpp, j'avais besoin de tout ça pour que tout soit récupéré et correctement lié. –

+0

qui a fonctionné pour moi. – Terrance

0

De quel code disposez-vous? Est-ce que vous faites tourner une boucle d'événement quelque part? par exemple. qapp.exec()?

+0

En fait non. Ce soir, j'essaie d'inclure QCoreApplication et app.exec() dans mon code (est une application console). – Emilio

+0

J'ai ajouté l'application QCoreApplication (argc, argv);/* appels d'objets et de méthodes */return app.exec(); dans la fonction principale(), mais il ne fixe rien. – Emilio

Questions connexes