Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QNetworkAccessManager获取网页时出现问题_C++_Qt_Qnetworkaccessmanager - Fatal编程技术网

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