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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QNetworkReply  (Прочитано 4466 раз)
acidburst
Гость
« : Июнь 24, 2011, 17:30 »

Тут для новичков, да *смущенно оглядываясь*

Такая хитрая задача получил ответ QNetworkReply. должны быть данные xml.
А теперь внимание вопрос:
Что мне с ними делать? Как вывести их куда-нибудь, чтобы удостовериться, что правильно все пришло?
я конечно понимаю, что вопрос глупый но всеже...
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Июнь 24, 2011, 17:49 »

*листая ассистент*
readAll ()
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
acidburst
Гость
« Ответ #2 : Июнь 25, 2011, 08:23 »

ну тогда вариант "лыжи не едут" отметается, посему еще один вопрос.

Код
C++ (Qt)
QNetworkReply *reply = ask.post(request,data);
 
   if reply->error())
       ui->label_2->setText("Error");
   else
       ui->answer->setText(requestApi(zapros)->readAll());

Вот это должно работать? ошибку не пишет, но ниче нет  Непонимающий Обеспокоенный
Записан
BRE
Гость
« Ответ #3 : Июнь 25, 2011, 09:44 »

После завершения метода post данных в reply еще нет, они будут поступать в дальнейшем.
О момент получения порции данных сигнализирует сигнал QNetworkReply - readyRead, о моменте получения всех данных - сигнал finished.
Все это описано в документации и показано в примерах.
 
Записан
acidburst
Гость
« Ответ #4 : Июнь 26, 2011, 09:05 »

Все сложно...

есть:
Код
C++ (Qt)
   QNetworkReply *reply = manager.post(request,"");
   if (reply->isOpen()) ui->answer->append("Open");
   if (reply->isRunning()) ui->answer->append("Running");
   if (reply->isReadable()) ui->answer->append("Readable");
   if (reply->error()) ui->answer->append("Error");
   if (reply->isFinished()) ui->answer->append("Finished");

В QTextBrowser аля answer пишется:

Open
Running
Readable

по идее должен же быть когдато финишед? или нужен какой-то цикл чтобы дождаться?
Записан
merke
Гость
« Ответ #5 : Июнь 26, 2011, 10:15 »

Для особо одаренных:

Код
C++ (Qt)
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)),
        this, SLOT(replyFinished(QNetworkReply*)));
 
manager->get(QNetworkRequest(QUrl("http://qt.nokia.com")));


В слоте replyFinished(QNetworkReply*) читай всё что придет тебе.
Записан
BRE
Гость
« Ответ #6 : Июнь 26, 2011, 10:21 »

по идее должен же быть когдато финишед? или нужен какой-то цикл чтобы дождаться?
Конечно должен быть. Когда придут все данные.  Улыбающийся
Данные приходят асинхронно, для корректной работы этого механизма нужно что бы крутился цикл обработки событий. Этот цикл ты можешь организовать сам используя класс QEventLoop или использовать цикл приложения, запускаемый методом QCoreApplication::exec().
О всех изменениях своего состояние объект reply сообщает по средствам отправки сигналов (readyRead, finished, error).

Посмотри и разберись с примером из examples - downloadmanager.  Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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