2010-05-05 7 views
5

CheckSite() 함수는 http://example.com과 같은 URL로 호출되며, QNetworkAccessManager 객체를 초기화하고 슬롯과 신호를 연결합니다.Qt QNetworkAccessManager가 신호를 방출하지 않습니다.

manger-> get() 호출이 작동하는 것처럼 보이지만 (http 트래픽을 생성 함) 요청 끝에서 슬롯 replyFinished()를 호출하지 않습니다.

이 코드의 잘못된 점은 무엇입니까?

#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

해결책을 찾았습니까? 나는 같은 문제가있다. –

+0

아니요, 프로젝트 작업을 중단합니다 – Emilio

답변

1

아무 것도. 완전히 포장되어 제대로 작동하므로 포장했습니다.

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

예상대로 "DONE"이 출력됩니다. 아마 당신이 확인하고있는 사이트가 정말로 돌아 오지 않을까요? 어쩌면 authentication가 필요하거나 ssl errors을 생산 중입니까?

+0

main() 소스 파일에 moc 파일을 포함해야합니까? – Emilio

+0

'#include "client.moc"는 헤더 파일에 클래스를 정의하지 않은 경우 (그리고 빌드 도구로'qmake'를 사용하는 경우)에만 필요합니다. 이후 client.cpp에 모든 것을 가지고 있기 때문에, 나는 모든 것을 집어 들고 올바르게 링크 할 수 있어야했습니다. –

+0

나를 위해 일했다. – Terrance

0

주위에 어떤 코드가 있습니까? 당신은 어딘가에서 이벤트 루프를 돌릴 수 있습니까? 예 : qapp.exec()?

+0

실제로 아닙니다. 오늘 밤 QCoreApplication 및 app.exec() 내 코드 (콘솔 응용 프로그램) 포함 해보십시오. – Emilio

+0

QCoreApplication 앱 (argc, argv)을 추가했습니다./* 객체와 메소드 호출 */return app.exec(); 상단의 main() 함수에 있지만, 아무것도 수정하지 않습니다. – Emilio

관련 문제