QNetworkAccessManager - finished信号不触发槽函数

3

我正在尝试使用 QNetworkAccessManager 获取URL的源代码...

但似乎信号槽复杂性存在问题!

我的 onFinished(QNetworkReply*) 永远不会被触发!为什么?

void Worker::start(QString url)
{
    QNetworkAccessManager manager;
    QNetworkReply *reply = manager.get(QNetworkRequest(QUrl(url)));
    QObject::connect(reply, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*)));
}

void Worker::onFinished(QNetWorkReply * reply)
{
    qDebug() << "Slot has been triggered!";

    QString html = reply->readAll();
}

编辑:

正如“Oleg Shparber”所述,以下是我的新代码(它也不能工作):

void Worker::start(QString url)
{
    QNetworkAccessManager *manager = new QNetworkAccessManager();
    QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(url)));
    QObject::connect(reply, SIGNAL(finished()), this, SLOT(onFinished()));


void Worker::onFinished()
{
    qDebug() << "Slot has been triggered!";

    QString html = reply->readAll();
}

我已根据您的问题更新修改了我的答案。 - Oleg Shparber
@OlegShparber 非常感谢。。我本来要通知您这只是一个小错误 :) - Alaa Salah
你发布这篇文章已经有一段时间了。但是你确定在请求到达之前,Worker对象本身没有被删除吗?(这就是我的情况...一个堆栈分配的对象提交请求并期望得到响应,但是在请求返回时它已经消失了...)FYI. - HostileFork says dont trust SE
1个回答

2

即使我使用了QObject::connect(reply, SIGNAL(finished()), this, SLOT(onFinished()));,并将我的槽的原型更改为void Worker::onFinished(),仍然没有任何反应。为什么? - Alaa Salah
1
谢谢您帮助我 budd :) ... 我动态创建了 QNetworkAccessManager,更改了我的槽函数,但是似乎没有任何作用 :( - Alaa Salah

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