Question

J'ai le code suivant:

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>");

Si le fichier distant est de 5 Mo, cela fonctionne, BT si le fichier est abot de 50 ou 500 Mo, le programme enregistre uniquement les 22 premiers Mo, tandis que le processus télécharge toujours le fichier en arrière-plan.

Qu'est-ce que je fais mal?

Était-ce utile?

La solution

10 secondes peut ne pas suffire à tout télécharger, en fonction de votre connexion Internet.N'utilisez pas la minuterie comme celle-ci.Pour voir l'effet immédiat, déposez ces lignes:

int timeInSeconds = 10;
QTimer *idleTimer = new QTimer(this);
connect(idleTimer,SIGNAL(timeout()),&loop,SLOT(quit()));
idleTimer->setInterval(timeInSeconds *1000);
idleTimer->start();

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top