crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> использование QNetworkAccessManager
eldar85
  опции профиля:
сообщение 11.8.2010, 10:58
Сообщение #1


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


пробую сделать класс для работы на QNetworkAccessManager но нифига не пойму одного, вот сделал такой код:

net.h

#ifndef NET_H
#define NET_H
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include "QtGui"

class network : public QObject
{
Q_OBJECT

public:


network *load(QString url);
network *setRef(QString ref);
network *setPost(QByteArray post);
QString exec();


private:
QString referer;
QString buffer;




QNetworkAccessManager manager;
QNetworkReply *reply;
QString Url;
QUrl apiUrl;
QByteArray postdata;




public slots:
void getReplyFinished();
void readyReadReply();


};



#endif // NET_H


net.cpp

#include "net.h"




network *network::load(QString newUrl)
{
Url = newUrl;
qDebug() << "1 ";
return this;
}

network *network::setRef(QString ref)
{
referer = ref;
return this;
}

network *network::setPost(QByteArray post)
{
postdata = post;
qDebug() << "2";
return this;
}

QString network::exec()
{


// apiUrl = "http://www.forismatic.com/api/1.0/";
//postdata = "method=getQuote&format=xml";
if(postdata != "")
{
QNetworkRequest request;
request.setUrl(QUrl(Url));
reply = manager.post(request, postdata);


connect(reply, SIGNAL(finished()), this, SLOT(getReplyFinished()));
connect(reply, SIGNAL(readyRead()), this, SLOT(readyReadReply()));

}

qDebug() << buffer;
return buffer;
}

void network::getReplyFinished()
{
reply->deleteLater();

}

void network::readyReadReply()
{
buffer = QString::fromUtf8(reply->readAll());




}


ну и сам вызов в главном классе

network *net = new network;


QString xStr = net->load("http://www.forismatic.com/api/1.0/")->setPost("method=getQuote&format=xml")->exec();



qDebug() << xStr;


по идее exec() должен вернуть buffer с данными, он он гад ничего не возращает, причем в слоте

void network::readyReadReply()
{
buffer = QString::fromUtf8(reply->readAll());

}


загрузка производится, но exec() завершается до того как произойдет вывод reply в buffer. В чем же проблема???

Сообщение отредактировал eldar85 - 11.8.2010, 11:00
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- eldar85   использование QNetworkAccessManager   11.8.2010, 10:58
- - Алексей1153   много недосказано Цитата(eldar85 @ 11.8.201...   11.8.2010, 11:19
- - eldar85   ну exec() возвращает QString, а buffer это QString...   11.8.2010, 11:55
- - Алексей1153   Насколько я понимаю, когда происходит выход из exe...   11.8.2010, 11:56
- - eldar85   net->load(...)->setPost(......   11.8.2010, 12:04
- - Алексей1153   так тебе асинхронно надо работать. После запуска н...   11.8.2010, 12:07
- - eldar85   а так получается что в start() был сделан вызов lo...   11.8.2010, 12:13
- - Алексей1153   eldar85, для асинхронного обмена объект должен жит...   11.8.2010, 12:29
- - eldar85   как же я тогда получу ответ вот сдесь CMainClass...   11.8.2010, 12:41
- - Алексей1153   ну дык... как то так: void network::ready...   11.8.2010, 13:11
- - eldar85   да такое я пробывал void network::readyRea...   11.8.2010, 13:24
- - Алексей1153   когда отправляешь запросы, складываешь их в список...   11.8.2010, 13:33
- - eldar85   как все неудобно(( я думал перейтис cUrl на Qt шны...   11.8.2010, 14:18
- - BRE   Ты про синхронную загрузка? На форуме были темы в ...   11.8.2010, 14:27
- - eldar85   решил задачу с помощью простого цикла)))) QString ...   11.8.2010, 15:48
- - Алексей1153   eldar85, не во всякой задаче удасться так сделать ...   11.8.2010, 16:46
- - eldar85   да я подкоректировал немного с таймаутом...   11.8.2010, 17:28


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 3:59