我正在尝试让我的应用程序从 URL(通常是 EXE 或 Jar)下载文件,但这并不是说这应该改变很多。我让这一切都在一个线程中运行,但我认为这不会有所作为(如果它确实让我知道的话)。
所以 Do_Download 是我创建管理器、设置 URL 和请求并执行获取的函数。然后我尝试将完成的信号连接到将写入文件的插槽。
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
我究竟做错了什么?