アプリケーションにURL(通常はEXEまたはJar)からファイルをダウンロードさせようとしていますが、これは大きく変わるはずではありません。私はこれをすべてスレッドで実行していますが、それが違いを生むとは思いません(それが私に知らせた場合)。
つまり、Do_Downloadは、マネージャーを作成し、URLとリクエストを設定し、getを実行する私の関数です。次に、終了した信号をスロットに接続して、ファイルを書き込みます。
void DownloadManager::Do_Download() {
QNetworkAccessManager *netManager = new QNetworkAccessManager(this);
QUrl url(install_mirror); //istall_mirror is the URL provided by user
QNetworkRequest req(url);
QNetworkReply *reply = netManager->get(req);
connect(reply, SIGNAL(finished()), this, SLOT(writeData()));
}
私のwriteData関数はエラーをチェックし、エラーがない場合はデータをファイルに書き込みます。
void DownloadManager::writeData() {
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
if (reply) {
if (reply->error() == QNetworkReply::NoError) {
QFile file(location);
if(file.open(QIODevice::WriteOnly)) {
file.write(reply->readAll());
} else {
errorMessage = "Error writing downloaded file for mirror installation";
}
} else {
//get http status code
int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
errorMessage = "HTTP Error code while downloading from mirror: " + httpStatus;
}
reply->deleteLater();
} else {
errorMessage = "Error downloading file from installation mirror";
}
}
書き込まれているデータがないという問題があります。0Kbファイルを作成するだけです。データの受信で何が起こっているのかを確認できるように、ダウンロードの進行状況スロットを追加してみました。そこで、これをDo_Downloadメソッドに追加しました。
connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(DL_Progress(qint64,qint64)));
void DownloadManager::DL_Progress(qint64 recieved, qint64 total) {
std::cout << recieved << " / " << total << endl;
}
出力は0/01として1回表示されます
私は何が間違っているのですか?