2010-02-09 4 views
0

У меня есть простой класс Networking с:Сигналы не получают излучаемый

private: 
    QNetworkAccessManager *httpclient; 

создать объект в конструкторе и подключить сигнал и слот:

httpclient = new QNetworkAccessManager(this); 
connect(httpclient, SIGNAL(finished(QNetworkReply*)), this, SLOT(httpRequestFinished(QNetworkReply*))); 

Теперь я собирается вызвать метод получения QNetworkAccessManager через открытый метод getPage:

void Networking::getPage(const QString &uri) 
{ 
    QNetworkRequest request; 
    request.setUrl(uri); 
    httpclient->get(request); 
} 

Я ожидаю, что httpRequestFinished получает вызов, но это не так. Я также попробовал это для целей тестирования:

void Networking::getPage(const QString &uri) 
{ 
    QNetworkRequest request; 
    request.setUrl(uri); 
    reply = httpclient->get(request); 
    connect(reply, SIGNAL(finished()), this, SLOT(httpReplyFinished())); 
} 

где ответ правильно определен в файле networking.h:

private: 
QNetworkAccessManager *httpclient; 
QNetworkReply *reply; 

Ничего не изменилось! Но если я получаю сообщение reply-> bytesAvailable() после получения запроса, все сигналы будут испускаться одновременно! Я ищу сейчас несколько часов, но не знаю, что я делаю неправильно.

ответ

1

так ... я узнал, почему, но не совсем: это было управление памятью. я должен был определить свой объект как указатель в моем классе MainWindow

Networking *nw; 

Теперь я могу использовать - например, в моей кнопочным-действия:

nw = new Networking(); 
nw->getPage("my url here"); 

Все шло, как и ожидалось! Ufff .. Многое, чтобы узнать