У меня есть следующий код:
QNetworkAccessManager *nam = new QNetworkAccessManager(this);
QNetworkReply *re = nam->get(QNetworkRequest(QUrl("http://somesite/ai.bin")));
QEventLoop loop;
QObject::connect(reply, SIGNAL(readyRead()), &loop, SLOT(quit()));
int timeInSeconds = 10;
QTimer *idleTimer = new QTimer(this);
connect(idleTimer,SIGNAL(timeout()),&loop,SLOT(quit()));
idleTimer->setInterval(timeInSeconds *1000);
idleTimer->start();
loop.exec();
//save
QFile file("C:/a.jpg");
file.open(QIODevice::WriteOnly);
file.write(re->readAll());
ui->dbgOut->insertHtml("<font color='green'>OK</font><br>");
Если удаленный файл имеет размер 5 МБ, он работает, но если размер файла не превышает 50 или 500 МБ, программа сохраняет только первые 22 МБ, в то время как процесс все равно загружает файл в фоновом режиме.
Что я делаю неправильно?
Для загрузки всего этого может не хватить 10 секунд, в зависимости от вашего интернет-соединения. Не используйте таймер, как это. Чтобы увидеть немедленный эффект, опустите эти строки:
int timeInSeconds = 10;
QTimer *idleTimer = new QTimer(this);
connect(idleTimer,SIGNAL(timeout()),&loop,SLOT(quit()));
idleTimer->setInterval(timeInSeconds *1000);
idleTimer->start();
Других решений пока нет …