У меня есть сомнения, как мне использовать QEventLoop
. У меня есть 2 фрагмента кода, оба они у меня работают (загрузить веб-ресурс).
Первый:
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()
как в первом? Я где-то нашел второе решение, но оно мне не показалось правильным, поэтому я изменил его в первую часть кода.
QEventLoop
предназначен для таких случаев. Когда вы не хотите делать свой код сложным (с большим количеством сигналов/слотов) и вам нужен единый поток с поддержкой логики, управляемой событиями. - person Dmitry Sazonov   schedule 04.04.2015