【发布时间】:2014-02-25 00:24:51
【问题描述】:
是的,伙计们,又是我。我有以下代码:
void MainWindow::on_startButton_clicked()
{
QNetworkAccessManager *nam = new QNetworkAccessManager(this);
QNetworkReply *re = nam->get(QNetworkRequest(QUrl("http://somesite/ai/iai.jpg")));
QEventLoop loop;
QObject::connect(reply, SIGNAL(readyRead()), &loop, SLOT(quit()));
loop.exec();
ui->dbgOut->insertHtml("<font color='green'>OK</font><br>");
ui->dbgOut->insertHtml("##################################");
//save
QFile file("C:\\a.bin");
file.open(QIODevice::WriteOnly);
file.write(re->readAll());
file.close();
}
我有两个问题:
当我点击按钮时,它会下载文件但不会将它们写入硬盘。我可以等 5 到 10 分钟,什么都没有。此时,整个文件存储在程序存储器中。如果我关闭我的程序,它们会保存在磁盘上。
根本不保存大文件 (~500MB)。当我关闭我的程序时,它会立即崩溃。
如何编辑它以便我的程序“实时”保存下载的文件?
【问题讨论】:
-
1) 你应该连接到finished(),而不是readyRead()。对于内存优化,您可以逐块读取,但是使用链式 readyRead。 2) 请显示崩溃的回溯。
-
Downloading a file with Qt? 的可能重复项
标签: c++ qt5 qnetworkaccessmanager qfile qeventloop