Ho dei dubbi su come dovrei usare QEventLoop
. Ho 2 pezzi di codice, entrambi funzionano per me (scarica la risorsa web).QEventLoop uso corretto
Primo uno:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setUrl(QUrl(url));
request.setRawHeader("User-Agent", "Mozilla Firefox");
connect(manager, SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
manager->get(request) ;
QEventLoop loop;
connect(manager, SIGNAL(finished(QNetworkReply*)),&loop, SLOT(quit()));
loop.exec();
secondo:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setUrl(QUrl(url));
request.setRawHeader("User-Agent", "Mozilla Firefox");
manager->get(request) ;
QEventLoop loop;
connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*)));
loop.exec();
Quello che voglio sapere è quale dovrei usare. Voglio dire, il ciclo degli eventi si chiude nella seconda dopo che il segnale è emmitato? O devo chiamare quit()
come nel primo? Ho trovato la seconda soluzione da qualche parte ma non mi sembrava adatta quindi l'ho modificata nel primo pezzo di codice.
Come si desidera interrompere ciclo di eventi nel secondo caso? Prima è OK, ma dovresti anche gestire gli errori. –
Sì, questo è quello che mi preoccupava, quindi l'ho cambiato. Non ero sicuro che stavo pensando in modo corretto, quindi ho chiesto a –
In generale, non dovresti usare nessuno - QApplication imposta già un loop di eventi per il thread principale e QThread imposta un loop di eventi per i thread in background. – MrEricSir