Chodzi mi o klasę QNetworkAccessManager. Metody GET i POST z niej wykonują się asynchronicznie. Co zrobić, aby wykonywały się synchronicznie i żeby można było np. serię zapytań robić w zwykłej pętli while/for, zamiast poprzez rekurencję?
0
1
Możesz np. użyć lokalnego EventLoopa. Ale jeśli teraz wysyłasz requesty w wątku gui, to zastanów się nad tym, czy nie będzie lepiej wywalić wszystkiego do osobnego wątku.
code sample:
QEventLoop loop;
QNetworkReply *reply = m_networkAccessManager->post(...); // lub m_networkAccessManager->get(...);
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
loop.exec();
// handle reply...
Po otrzymaniu odpowiedzi lub wystąpieniu błędu loop się kończy i program może robić z reply to co teraz prawdopodobnie robi w slocie podpiętym do &QNetworkAccessManager::finished
.
0
@git Przetestowałem to i działa :) Rozumiem, że w praktyce takie użycie będzie na pewno dobre, jeśli zechcę pobrać 5 razy zawartość jakieś strony?
for(int i=0; i<5; ++i)
{
QEventLoop loop;
reply = manager.get(QNetworkRequest(QUrl("http://localhost/test/")));
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
loop.exec();
testString += reply->readAll();
ui->textBrowser->setText(testString);
}