Qt QNetworkAccessManager не излучает сигналы - PullRequest
5 голосов
/ 06 мая 2010

Функция CheckSite () вызывается с URL-адресом, подобным http://example.com,, она инициализирует объект 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 ]

1 голос
/ 06 мая 2010

Ничего. Я обернул его, чтобы он был полностью функциональным и он прекрасно работает:

// 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", как и ожидалось. Может быть, сайт, который вы проверяете, действительно не возвращается? Может быть, требуется аутентификация или выдается ssl error ?

0 голосов
/ 06 мая 2010

Какой код у вас есть вокруг этого? Ты где-нибудь крутишь цикл событий? например qapp.exec ()?

...