пробую сделать класс для работы на 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