我懷疑我應該如何使用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()
?我在某處找到了第二個解決方案,但它對我來說似乎並不合適,所以我將它修改爲第一段代碼。
你怎麼想中斷事件循環在第二種情況下側?首先是好的,但你也應該處理錯誤。 – 2015-04-04 17:52:59
是的,那就是我正在努力,所以我改變了它。我只是不確定我是否正確思考,所以我問 – 2015-04-04 18:04:47
一般來說你不應該使用 - QApplication已經爲主線程設置了一個事件循環,而QThread爲後臺線程設置了一個事件循環。 – MrEricSir 2015-04-04 18:25:57