gpt4 book ai didi

c++ - QNetworkAccessManager 问题获取网页

转载 作者:行者123 更新时间:2023-11-30 02:03:56 25 4
gpt4 key购买 nike

我正在尝试使用以下代码下载网页的源代码头文件:

#include <QObject>
#include <QHttp>
#include <QtNetwork>
#include <QFile>
#include <QDebug>

class CDownloader : public QObject
{
Q_OBJECT
public:
explicit CDownloader(QObject *parent = 0);

void Do_Download();

signals:

public slots:
void result(QNetworkReply*);
private:
QNetworkAccessManager *manager;
QNetworkReply *reply;
QNetworkAccessManager qnam;
};

#endif // CDOWNLOADER_H

和源文件:

#include "cdownloader.h"

CDownloader::CDownloader(QObject *parent) :
QObject(parent)
{
}

void CDownloader::Do_Download()
{
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(result(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://www.google.com")));
}

void CDownloader::result(QNetworkReply *reply)
{
qDebug() << "loading complete";
}

和按钮代码:

void MainWindow::on_download_clicked()
{
CDownloader cDown;
cDown.Do_Download();
}

但 qDebug 永远不会在结果槽中调用。我错过了什么?

最佳答案

void MainWindow::on_download_clicked()
{
CDownloader cDown;
cDown.Do_Download();
}

当该方法返回时,cDown 立即被销毁。至少只要您还没有收到和处理回复,您就需要让该对象保持事件状态。

为此,cDown 应该是您的 MainWindow 的成员,或者指向(或指针集合)CDownloader 的指针应该在您的代码中的某处进行维护(并妥善处置)。

关于c++ - QNetworkAccessManager 问题获取网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11273582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com