2010-05-05 15 views
5

La función CheckSite() se invoca con una url como http://example.com, inicializa un objeto QNetworkAccessManager y conecta() ranuras y señales.Qt QNetworkAccessManager no emite señales

La llamada a manger-> get() parece funcionar (genera tráfico http) pero no llama a la ranura answerFinished() al final de la solicitud.

¿Qué pasa con este código?

#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

¿Encontró la solución? Estoy teniendo el mismo problema. –

+0

no, dejo de trabajar en el proyecto – Emilio

Respuesta

1

Nada. Lo envolví para que fuera completamente funcional y funciona 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" 

Se emite "HECHO" como se esperaba. ¿Tal vez el sitio que está revisando realmente no está volviendo? Tal vez necesita authentication o está produciendo ssl errors?

+0

¿Debo incluir el archivo moc en mi archivo fuente principal()? – Emilio

+0

El '#include" client.moc "' solo es necesario cuando no tienes tu clase definida en un archivo de cabecera (y estás usando 'qmake' como tu herramienta de compilación). Como tenía todo en client.cpp, lo necesitaba para que todo se recogiera y vincule correctamente. –

+0

que funcionó para mí. – Terrance

0

¿Qué código tiene al respecto? ¿Hila un bucle de evento en alguna parte? p.ej. qapp.exec()?

+0

En realidad, no. Esta noche intento incluir QCoreApplication y app.exec() en mi código (es una aplicación de consola). – Emilio

+0

He agregado la aplicación QCoreApplication (argc, argv);/* objetos y llamadas a métodos */return app.exec(); en la función principal principal(), pero no arregla nada. – Emilio

Cuestiones relacionadas