我有疑问如何使用 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()
?我在某处找到了第二个解决方案,但对我来说似乎不合适,所以我将其修改为第一个代码片段。
QEventLoop
就是为这种情况设计的。当您不想让代码复杂化(使用大量信号/槽)并需要支持事件驱动逻辑的单个流时,可以使用它。 - Dmitry Sazonov