C++ QNetworkAccessManager获取网页时出现问题
我正在尝试下载网页的源代码,其中包含以下代码 头文件:C++ QNetworkAccessManager获取网页时出现问题,c++,qt,qnetworkaccessmanager,C++,Qt,Qnetworkaccessmanager,我正在尝试下载网页的源代码,其中包含以下代码 头文件: #include <QObject> #include <QHttp> #include <QtNetwork> #include <QFile> #include <QDebug> class CDownloader : public QObject { Q_OBJECT public: explicit CDownloader(QObject *parent = 0)
#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
但是qDebug永远不会在结果槽中调用。我错过了什么
void MainWindow::on_download_clicked()
{
CDownloader cDown;
cDown.Do_Download();
}
当该方法返回时,cDown
立即被销毁。您需要使该对象保持活动状态,至少在您尚未收到和处理回复的情况下保持活动状态
为此,cDown
应该是main窗口的成员,或者应该在代码中的某个地方维护(并正确处理)指向CDownloader
的指针(或指向CDownloader的指针集合)
当该方法返回时,cDown
立即被销毁。您需要使该对象保持活动状态,至少在您尚未收到和处理回复的情况下保持活动状态
因此,cDown
应该是main窗口的成员,或者应该在代码中的某个地方维护(并正确处理)指向CDownloader
的指针(或指向CDownloader的指针集合)。就我所见,您的代码看起来不错。介意发布完整的代码吗?@ion代码中存在内存泄漏。您必须在finished()
处理程序中删除QNetworkReply。你可以使用reply->deleteLater()
来实现这一点。就我所见,你的代码看起来不错。介意发布完整的代码吗?@ion代码中存在内存泄漏。您必须在finished()
处理程序中删除QNetworkReply。您可以使用reply->deleteLater()
进行此操作。
void MainWindow::on_download_clicked()
{
CDownloader cDown;
cDown.Do_Download();
}
void MainWindow::on_download_clicked()
{
CDownloader cDown;
cDown.Do_Download();
}