Network::Network(QString urlString) {
url = QUrl(urlString);
manager = new QNetworkAccessManager(this);
}
void Network::getReply() {
QEventLoop loop;
reply = manager->get(QNetworkRequest(url));
connect(reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
}
void Network::downloadFinished(){
QByteArray webContent = reply->readAll();
}
Считывание html
Есть код считывания html страницы:
Код:
Мне что непонятно
Зачем здесь используется QEventLoop?
Для того, чтобы отследить момент окончания запроса reply?
Получается, что 2 слота-сигнала именно для этого
Код:
connect(reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
Или можно обойтись без этого, и сделать сразу
Код:
void Network::getReply() {
reply = manager->get(QNetworkRequest(url));
QByteArray webContent = reply->readAll();
}
reply = manager->get(QNetworkRequest(url));
QByteArray webContent = reply->readAll();
}
Кто-то знает?
Цитата: Lindemann66
Всем привет!
Есть код считывания html страницы:
Мне что непонятно
Зачем здесь используется QEventLoop?
Для того, чтобы отследить момент окончания запроса reply?
Получается, что 2 слота-сигнала именно для этого
?
Или можно обойтись без этого, и сделать сразу
Кто-то знает?
Есть код считывания html страницы:
Код:
Network::Network(QString urlString) {
url = QUrl(urlString);
manager = new QNetworkAccessManager(this);
}
void Network::getReply() {
QEventLoop loop;
reply = manager->get(QNetworkRequest(url));
connect(reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
}
void Network::downloadFinished(){
QByteArray webContent = reply->readAll();
}
url = QUrl(urlString);
manager = new QNetworkAccessManager(this);
}
void Network::getReply() {
QEventLoop loop;
reply = manager->get(QNetworkRequest(url));
connect(reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
}
void Network::downloadFinished(){
QByteArray webContent = reply->readAll();
}
Мне что непонятно
Зачем здесь используется QEventLoop?
Для того, чтобы отследить момент окончания запроса reply?
Получается, что 2 слота-сигнала именно для этого
Код:
connect(reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
Или можно обойтись без этого, и сделать сразу
Код:
void Network::getReply() {
reply = manager->get(QNetworkRequest(url));
QByteArray webContent = reply->readAll();
}
reply = manager->get(QNetworkRequest(url));
QByteArray webContent = reply->readAll();
}
Кто-то знает?
Это для того, чтоб пока полностью ответ не получишь (сигнал finished) из функции не произошло возврата. Т.к. в Qt http и ftp работают в асинхронном режиме
Равносильно примерно следующему:
Код:
bool finished;
Network::Network(QString urlString) {
url = QUrl(urlString);
manager = new QNetworkAccessManager(this);
}
void Network::getReply() {
finished=false;
reply = manager->get(QNetworkRequest(url));
connect(reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
while(!finished);
}
void Network::downloadFinished(){
QByteArray webContent = reply->readAll();
finished=true;
}
Network::Network(QString urlString) {
url = QUrl(urlString);
manager = new QNetworkAccessManager(this);
}
void Network::getReply() {
finished=false;
reply = manager->get(QNetworkRequest(url));
connect(reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
while(!finished);
}
void Network::downloadFinished(){
QByteArray webContent = reply->readAll();
finished=true;
}
Только проц не грузит пустым циклом.