-3

私の小さなプログラムについて助けを求めています。QNetwork クラスを使用して Web サイトからセットアップ (.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」ファイルに「network」も追加しました。しかし、プログラムを実行して別のクラスのプッシュ ボタンをクリックすると、initialiseDownload() は機能していますが、シグナルが非アクティブのようです。

前もって感謝します !

4

1 に答える 1