Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Считывание html

5.7K
11 августа 2011 года
Lindemann66
193 / / 21.07.2011
Всем привет!

Есть код считывания 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();
}


Мне что непонятно

Зачем здесь используется QEventLoop?
Для того, чтобы отследить момент окончания запроса reply?
Получается, что 2 слота-сигнала именно для этого
 
Код:
connect(reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
?
Или можно обойтись без этого, и сделать сразу
 
Код:
void Network::getReply() {    
    reply = manager->get(QNetworkRequest(url));
    QByteArray webContent = reply->readAll();
}


Кто-то знает?
277
11 августа 2011 года
arrjj
1.7K / / 26.01.2011
Цитата: Lindemann66
Всем привет!

Есть код считывания 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();
}


Мне что непонятно

Зачем здесь используется QEventLoop?
Для того, чтобы отследить момент окончания запроса reply?
Получается, что 2 слота-сигнала именно для этого
 
Код:
connect(reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
?
Или можно обойтись без этого, и сделать сразу
 
Код:
void Network::getReply() {    
    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;
}

Только проц не грузит пустым циклом.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог