Russian Qt Forum
Ноября 02, 2025, 20:46
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
QNetworkAccessManager finished() не удаляется предыдущей QNetworkReply
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QNetworkAccessManager finished() не удаляется предыдущей QNetworkReply (Прочитано 5552 раз)
Dovgon
Гость
QNetworkAccessManager finished() не удаляется предыдущей QNetworkReply
«
:
Апреля 29, 2016, 08:03 »
Отправляю в цикле post запросы к серверу. Сигнал finished(), связываю с слотом в котором обрабатываю результат запроса, в конце вызываю reply->deleteLater(). Но при обработки следующего ответа оказывается, что старые данные (QNetworkReply) не удалились. В чем ошибка?
Записан
arhohryakov
Гость
Re: QNetworkAccessManager finished() не удаляется предыдущей QNetworkReply
«
Ответ #1 :
Апреля 29, 2016, 12:06 »
Хотелось бы увидеть как Вы создаёте запросы и по каким признакам выяснили, что станые данные не удалились.
Записан
Bepec
Гость
Re: QNetworkAccessManager finished() не удаляется предыдущей QNetworkReply
«
Ответ #2 :
Апреля 29, 2016, 12:27 »
Код.
Записан
Dovgon
Гость
Re: QNetworkAccessManager finished() не удаляется предыдущей QNetworkReply
«
Ответ #3 :
Апреля 29, 2016, 13:20 »
в коде все просто
...
connect(m_net, SIGNAL(finished(QNetworkReply*)), this, SLOT(PostReplyFinisheduser(QNetworkReply*)));
...
void MainWindow::PostReplyFinisheduser(QNetworkReply *reply){
int code=reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if(code==301 || code==302){
QUrl redirectUrl=reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
m_net->get(QNetworkRequest(redirectUrl));
}
if(reply->error()==QNetworkReply::NoError){
QByteArray content=reply->readAll();
//content - через несколько итераций приходит старый то есть не сработал reply->deleteLater();
....
}
reply->deleteLater();
if(code==200 || code==404){
if(vUser->size()>currentUrl){
QUrl url(vUser->at(currentUrl)->nameurl);
QNetworkRequest request(url);
...
m_net->post(request, postData);
}
}
}
В Векторе все url разные
Записан
Bepec
Гость
Re: QNetworkAccessManager finished() не удаляется предыдущей QNetworkReply
«
Ответ #4 :
Апреля 29, 2016, 13:30 »
Неверно.
Во 1 - у вас Reply каждый раз новый. Т.е. не старый reply с старыми данными, а новый reply с старыми данными.
По всей видимости вы запрашиваете одни и те же данные
во 2 - пользуйтесь тегом [ code ] [ /code]. Вот такой значек на панельке "#".
Приводите код, как вы запрашиваете и будем разбираться.
Записан
Dovgon
Гость
Re: QNetworkAccessManager finished() не удаляется предыдущей QNetworkReply
«
Ответ #5 :
Апреля 29, 2016, 21:17 »
сигнал finished вызывается когда загрузка завершена. значит или в самом qt испускается сигнал неправильно, или данные от предыдущего запроса не были удалены reply->deleteLater();. Вопрос в том как от этого эфекта избавится. На зарубежных форумах предлагают перенести работу с запросами в новый поток, может кто покажет пример?
Записан
Bepec
Гость
Re: QNetworkAccessManager finished() не удаляется предыдущей QNetworkReply
«
Ответ #6 :
Апреля 29, 2016, 21:52 »
Уважаемый Dovgon, давайте я вам скажу 3 простые вещи. Поверьте мне на слово.
1) в Qt ошибок очень мало.
2) в 90% ошибок виноват код программы.
3) в 99% случаев ошибок кода, виноват тот, кто написал этот код.
Потому если включить самокритику, вы можете сделать следующие вещи:
1) проверить свой код ещё раз.
2) сделать тестовый проект, воспроизводящий проблему, запаковать его в архив и прикрепить сюда к сообщению. Весь проект, включая pro/cpp/h файлы.
Ну или если не включать, то можете посетовать что Qt кривой, люди на форуме злые, а иностранные форумы всё верно говорят.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...