Ich habe Zweifel, wie sollte ich QEventLoop
verwenden. Ich habe 2 Stück Code, beide funktionieren für mich (Web-Ressource herunterladen).QEventLoop richtige Verwendung
erste:
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();
Zweite ein:
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();
Was ich wissen will, ist, was soll ich verwenden. Ich meine, endet die Ereignisschleife in der zweiten, nachdem das Signal ausgelöst wurde? Oder muss ich quit()
wie in der ersten anrufen? Ich fand die zweite Lösung irgendwo, aber es schien mir nicht passend, also habe ich es in das erste Stück Code geändert.
Wie wollen Sie Ereignisschleife in zweiten Fall zu unterbrechen? Zuerst ist OK, aber Sie sollten auch Fehler behandeln. –
Ja, das war es, worüber ich mir Sorgen machte, also habe ich es geändert. Ich war einfach nicht sicher, ob ich richtig dachte, also fragte ich –
Im Allgemeinen sollten Sie auch nicht verwenden - QApplication richtet bereits eine Ereignisschleife für den Hauptthread ein, und QThread richtet eine Ereignisschleife für Hintergrundthreads ein. – MrEricSir