Qt QNetworkAccessManager没有发出信号

5
函数CheckSite()将类似于http://example.com的url作为参数调用,它初始化了一个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));
}

不,我停止在这个项目上的工作。 - Emilio
2个回答

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"

它按预期输出了“完成”。也许你检查的站点确实没有返回? 或者它需要身份验证或产生ssl错误

我应该在我的main()源文件中包含moc文件吗? - Emilio
只有当您没有在头文件中定义类(并且使用qmake作为构建工具)时,才需要#include“client.moc”。由于我把所有东西都放在了client.cpp文件中,所以我需要这个文件来确保所有内容都能正确链接和捆绑。 - Kaleb Pederson

0
你的代码中有什么相关的内容吗?你在某个地方旋转了事件循环吗?比如 qapp.exec() ?

其实不是。今晚我尝试在我的代码中包含QCoreApplication和app.exec()(是一个控制台应用程序)。 - Emilio
我已经在主函数顶部添加了QCoreApplication app(argc, argv); /* 对象和方法调用 */ return app.exec();,但它并没有解决任何问题。 - Emilio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接