3

我正在尝试使用QNetworkAcessManager获取 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();
}
4

1 回答 1

2

您的QNetworkAccessManager在控制到达start()方法结束后立即被破坏(有关详细信息,请参阅RAII。)。您需要QNetworkAccessManager在请求执行时动态创建并使其保持活动状态。

此外,您正在连接到不存在的信号。有QNetworkReply::finished(),但没有QNetworkReply::finished(QNetworkReply*)。如果需要指向QNetworkReply的指针,也可以使用QNetworkAccessManager::finished(QNetworkReply*)

于 2014-07-26T18:07:31.887 回答