Скачать файл с сайта

Я ищу помощь по моей маленькой программе. Я хотел бы загрузить настройки (.exe) с веб-сайта, используя класс QNetwork. Я уже искал и прочитал много постов об этом, но это не работает.

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

download.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;
};

Я добавил DLL для OpenSSL, и это работает. Я также добавил «сеть» в файл .pro. Но когда я запускаю свою программу и нажимаю на кнопку другого класса, initialiseDownload () работает, но сигналы кажутся неактивными.

Заранее спасибо !

-3

Решение

В вашем Download::initialiseDownload() функция, вы создаете QNetworkAccessManager это выходит за рамки в конце функции.

Положить ваши QNetworkAccessManager как переменная-член или где-то, где он живет, по крайней мере, на протяжении всей загрузки.

Учитывая, что вы называете свой класс «Скачать», вероятно, наиболее логично, что QNetworkAccessManager живет (или является) родителем вашего Download экземпляр, так как вы (можете) начать несколько загрузок одновременно с одним и тем же QNetworkAccessManager,

4

Другие решения


По вопросам рекламы [email protected]