【问题标题】:Qt QNetworkAccessManager does not emit signalsQt QNetworkAccessManager 不发出信号
【发布时间】:2011-02-16 03:01:12
【问题描述】:

函数 CheckSite() 使用像 http://example.com 这样的 url 调用,它初始化 QNetworkAccessManager 对象和 connect() 插槽和信号。

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));
}

【问题讨论】:

  • 您找到解决方案了吗?我也有同样的问题。
  • 不,我停止在该项目工作

标签: qt qt4 signals slot


【解决方案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?

【讨论】:

  • 我应该在我的 main() 源文件中包含 moc 文件吗?
  • #include "client.moc" 仅在您没有在头文件中定义类时才需要(并且您使用qmake 作为构建工具)。由于我在 client.cpp 中拥有所有内容,因此我需要它以便正确获取并链接所有内容。
【解决方案2】:

你有什么代码?你在某处旋转事件循环吗?例如qapp.exec() ?

【讨论】:

  • 其实不是。今晚我尝试在我的代码中包含 QCoreApplication 和 app.exec() (是一个控制台应用程序)。
  • 我添加了 QCoreApplication app(argc, argv); /* 对象和方法调用 */ return app.exec();在顶部 main() 函数中,但它没有解决任何问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多