2010-05-05 11 views
5

Funkcja CheckSite() jest wywoływana z adresem URL takim jak http://example.com, inicjuje obiekt QNetworkAccessManager i connect() gniazda i sygnały.Qt QNetworkAccessManager nie emituje sygnałów

Wywołanie manger-> get() wydaje się działać (generuje ruch http), ale nie wywołuje funkcji replyFinished() na końcu żądania.

Co jest nie tak z tym kodem?

#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

Czy znalazłeś rozwiązanie? Mam ten sam problem. –

+0

nie, przestaję pracować przy projekcie – Emilio

Odpowiedz

1

Nic. Zapakowałem go, aby był w pełni funkcjonalny i działał prawidłowo:

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

Wypisuje "Zrobione" zgodnie z oczekiwaniami. Może strona, którą sprawdzasz, naprawdę nie wraca? Może potrzebuje authentication lub produkuje ssl errors?

+0

Czy powinienem dołączyć plik moc do mojego głównego pliku źródłowego()? – Emilio

+0

"#include" client.moc "' jest konieczne tylko wtedy, gdy klasa nie jest zdefiniowana w pliku nagłówkowym (i używasz 'qmake' jako narzędzia do budowania). Ponieważ miałem wszystko w client.cpp, potrzebowałem tego, aby wszystko zostało odebrane i poprawnie połączone. –

+0

który pracował dla mnie. – Terrance

0

Jaki masz kod? Czy gdzieś spinujesz pętlę zdarzeń? na przykład qapp.exec()?

+0

Właściwie nie. Dziś wieczorem próbuję włączyć QCoreApplication i app.exec() do mojego kodu (jest to aplikacja konsolowa). – Emilio

+0

Dodałem aplikację QCoreApplication (argc, argv);/* obiekty i wywołania metod */return app.exec(); w górnej funkcji głównej(), ale niczego nie naprawia. – Emilio

Powiązane problemy