Russian Qt Forum

Qt => Вопросы новичков => Тема начата: acidburst от Июнь 24, 2011, 17:30



Название: QNetworkReply
Отправлено: acidburst от Июнь 24, 2011, 17:30
Тут для новичков, да *смущенно оглядываясь*

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


Название: Re: QNetworkReply
Отправлено: Пантер от Июнь 24, 2011, 17:49
*листая ассистент*
readAll ()


Название: Re: QNetworkReply
Отправлено: acidburst от Июнь 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());

Вот это должно работать? ошибку не пишет, но ниче нет  ??? :-[


Название: Re: QNetworkReply
Отправлено: BRE от Июнь 25, 2011, 09:44
После завершения метода post данных в reply еще нет, они будут поступать в дальнейшем.
О момент получения порции данных сигнализирует сигнал QNetworkReply - readyRead, о моменте получения всех данных - сигнал finished.
Все это описано в документации и показано в примерах.
 


Название: Re: QNetworkReply
Отправлено: acidburst от Июнь 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

по идее должен же быть когдато финишед? или нужен какой-то цикл чтобы дождаться?


Название: Re: QNetworkReply
Отправлено: merke от Июнь 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*) читай всё что придет тебе.


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

Посмотри и разберись с примером из examples - downloadmanager.  ;)