Russian Qt Forum
Ноябрь 26, 2024, 09:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как закрыть соединенение?  (Прочитано 1730 раз)
GamBitiK
Гость
« : Май 05, 2014, 22:20 »

void test::GetUrl()
{
   
connect (manager, SIGNAL(finished(QNetworkReply*)),this,
         SLOT(replyFinished(QNetworkReply*)));

manager->get(QNetworkRequest(QUrl(yandex.ru)));

   

}


}











void test::replyFinished(QNetworkReply *Reply)
{

QByteArray txt = Reply->readAll();
if (i=1)
{ оборвать это соединение и не продолжать с ним работать
}
}
Записан
carrygun
Гость
« Ответ #1 : Май 06, 2014, 04:25 »

У вас и так соединение ничего уже не делает, после испускания сигнала finished.

P.S. и не забывайте в таких слотах удалять ответ, иначе будет утечка памяти
Код
C++ (Qt)
void finished(QNetworkReply *r) {
   QByteArray ba = r->readAll();
   r->deleteLater();
   ...
 
Записан
carrygun
Гость
« Ответ #2 : Май 06, 2014, 04:45 »

Я так понимаю, это связано с этой темой.
QNetworkAccessManager при вызове метода get() возвращает вам указатель на ответ QNetworkReply. Этот ответ является наследником класса QIODevice. Вам надо зацепиться на сигнал readyRead() этого ответа и читать данные из потока. Ну и в конце, если необходимо, то вызвать у ответа метод abort().

Псевдокод:
Код
C++ (Qt)
...
QNetworkReply *r = manager->get(...);
connect(r, SIGNAL(readyRead()), SLOT(mySlot()));
...
 
void MyClass::mySlot()
{
   QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
   if (!reply) return;
 
   QByteArray ba = reply->readAll();
   ...
   if (...) {
       ...
       reply->abort();
       reply->deleteLater();
   }
}
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.143 секунд. Запросов: 20.