2010-05-05 18 views
5

La funzione CheckSite() viene chiamata con un url come http://example.com, inizializza un oggetto QNetworkAccessManager e connette() slot e segnali.Qt QNetworkAccessManager non emette segnali

La chiamata manger-> get() sembra funzionare (genera traffico http) ma non chiama lo slot replyFinished() alla fine della richiesta.

Cosa c'è di sbagliato con questo codice?

#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

Hai trovato la soluzione? Sto avendo lo stesso problema. –

+0

no, smetto di funzionare nel progetto – Emilio

risposta

1

Niente. L'ho spostato in modo che fosse perfettamente funzionante e funziona perfettamente:

// 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" 

Invia "DONE" come previsto. Forse il sito che stai controllando in realtà non sta tornando? Forse ha bisogno di authentication o sta producendo ssl errors?

+0

Devo includere il file moc nel mio file sorgente principale()? – Emilio

+0

Il '# include" client.moc "' è necessario solo quando non hai la tua classe definita in un file di intestazione (e stai usando 'qmake' come strumento di costruzione). Dal momento che avevo tutto in client.cpp, ne avevo bisogno, quindi tutto sarebbe stato raccolto e collegato correttamente. –

+0

che ha funzionato per me. – Terrance

0

Che codice avete intorno? Giri un ciclo di eventi da qualche parte? per esempio. qapp.exec()?

+0

In realtà no. Stasera cerco di includere QCoreApplication e app.exec() nel mio codice (è un'applicazione console). – Emilio

+0

Ho aggiunto l'app QCoreApplication (argc, argv);/* oggetti e chiamate di metodi */return app.exec(); nella funzione main() superiore, ma non risolve nulla. – Emilio

Problemi correlati