У меня есть сомнения, как использовать QEventLoop
. У меня есть 2 части кода, оба они работают для меня (загрузите веб-ресурс).Правильное использование QEventLoop
Первый один:
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();
Второй один:
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();
То, что я хочу знать, какой из них следует использовать. Я имею в виду, что цикл событий завершается во втором после выхода сигнала? Или мне нужно позвонить quit()
, как в первом? Я нашел второе решение где-то, но мне это не показалось правильным, поэтому я изменил его на первую часть кода.
Как вы хотите, чтобы прервать цикл событий во втором случае? Сначала все в порядке, но вы также должны обрабатывать ошибки. –
Да, это то, что я беспокоился, поэтому я изменил его. Я просто не был уверен, правильно ли я думал, поэтому я спросил –
В общем, вы не должны использовать ни один из них - QApplication уже устанавливает цикл событий для основного потока, а QThread устанавливает цикл событий для фоновых потоков. – MrEricSir