2010-05-05 33 views
5

Hàm CheckSite() được gọi với một url như http://example.com, nó khởi tạo một đối tượng QNetworkAccessManager và các khe cắm và tín hiệu connect().Qt QNetworkAccessManager không phát ra tín hiệu

Cuộc gọi manger-> get() dường như hoạt động (nó tạo ra lưu lượng truy cập http) nhưng không gọi trả lời vị tríĐược hoàn thành() ở cuối yêu cầu.

Có gì sai với mã này?

#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

Bạn có tìm thấy giải pháp này không? Tôi đang gặp vấn đề tương tự. –

+0

không, tôi ngừng làm việc tại dự án – Emilio

Trả lời

1

Không có gì. Tôi bọc nó sao cho nó hoạt động hoàn toàn và nó hoạt động tốt:

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

Sản lượng "DONE" như mong đợi. Có thể trang web bạn đang kiểm tra thực sự không quay lại? Có lẽ nó cần authentication hoặc đang sản xuất ssl errors?

+0

Tôi có nên đưa tệp moc vào tệp nguồn chính() của mình không? – Emilio

+0

'#include" client.moc "' chỉ cần thiết khi bạn không xác định lớp của bạn trong một tệp tiêu đề (và bạn đang sử dụng 'qmake' làm công cụ xây dựng của mình). Vì tôi có mọi thứ trong client.cpp, tôi cần nó để mọi thứ sẽ được chọn và liên kết chính xác. –

+0

làm việc cho tôi. – Terrance

0

Bạn có mã nào xung quanh mã đó? Bạn có quay một vòng lặp sự kiện ở đâu đó không? ví dụ. qapp.exec()?

+0

Thực ra là không. Tối nay tôi thử bao gồm QCoreApplication và app.exec() trong mã của tôi (là một ứng dụng giao diện điều khiển). – Emilio

+0

Tôi đã thêm ứng dụng QCoreApplication (argc, argv);/* đối tượng và các cuộc gọi phương thức */return app.exec(); trong hàm main() trên cùng, nhưng nó không sửa chữa bất cứ thứ gì. – Emilio