Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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++ 从网站下载文件_C++_Qt_Qnetworkaccessmanager_Qnetworkrequest_Qnetworkreply - Fatal编程技术网

C++ 从网站下载文件

C++ 从网站下载文件,c++,qt,qnetworkaccessmanager,qnetworkrequest,qnetworkreply,C++,Qt,Qnetworkaccessmanager,Qnetworkrequest,Qnetworkreply,我正在寻求有关我的小程序的帮助。我想使用QNetwork类从网站下载setup.exe。我已经搜索并阅读了很多关于它的帖子,但是它不起作用 下载.cpp: Download::Download(QObject *parent) : QObject(parent) { } void Download::initialiseDownload() { QNetworkAccessManager manager; QNetworkRequest request; reques

我正在寻求有关我的小程序的帮助。我想使用QNetwork类从网站下载setup.exe。我已经搜索并阅读了很多关于它的帖子,但是它不起作用

下载.cpp:

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

void Download::initialiseDownload()
{
    QNetworkAccessManager manager;
    QNetworkRequest request;

    request.setUrl(QUrl("http://www.mylink.com/setup.exe"));
    reply = manager.get(request);

    QObject::connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(downloadError(QNetworkReply::NetworkError)));
    QObject::connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(updateProgress(qint64, qint64)));
    QObject::connect(reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
}

void Download::downloadError(QNetworkReply::NetworkError err)
{
    qDebug() << reply->errorString();
    reply->deleteLater();
}

void Download::updateProgress(qint64 read, qint64 total)
{
    qDebug() << "Progress...";
    qint64 percent = (read / total) * 100;
    qDebug() << percent;
}

void Download::downloadFinished()
{
    qDebug() << "Finished !";
    QByteArray b = reply->readAll();
    QFile file("./sdk/setup.exe");
    file.open(QIODevice::WriteOnly);
    QDataStream out(&file);
    out << b;
    reply->deleteLater();
}
下载.h:

#include "launcher.h"
#include <QObject>
#include <QtNetwork>

class Download : public QObject, public Launcher
{
    Q_OBJECT
public:
    explicit Download(QObject *parent = 0);
    void Download::initialiseDownload();

private slots:
    void downloadError(QNetworkReply::NetworkError err);
    void updateProgress(qint64 read, qint64 total);
    void downloadFinished();

private:
    QNetworkReply *reply;
};
我已经为OpenSSL添加了DLL,它可以正常工作。我还向.pro文件中添加了网络。但是,当我运行我的程序,点击另一个类中的按钮时,initialiseDownload正在工作,但信号似乎处于非活动状态

提前谢谢

在Download::initialiseDownload函数中,您创建的QNetworkAccessManager在函数末尾超出范围

将您的QNetworkAccessManager作为成员变量或放置在某个位置,至少在下载期间

考虑到您调用类Download,QNetworkAccessManager可能是您下载实例的父实例,或者是您下载实例的父实例,因为您可以使用同一个QNetworkAccessManager同时启动多个下载