Qt QNetworkAccessManager和多个QNetworkReply
我有两个QNetworkRequest 我想用不同的方法处理完成的信号 例如,这是中的代码Qt QNetworkAccessManager和多个QNetworkReply,qt,http,web,qnetworkaccessmanager,Qt,Http,Web,Qnetworkaccessmanager,我有两个QNetworkRequest 我想用不同的方法处理完成的信号 例如,这是中的代码 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); GetUserData(); connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(GetUse
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
GetUserData();
connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(GetUserDataCompleted(QNetworkReply*)));
GetMessages();
connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(GetMessagesCompleted(QNetworkReply*)));
}
这是我唯一的方法
我尝试了replay->deleteLater();但同样的结果
请给我一些有用的建议
void MainWindow::GetUserDataCompleted(QNetworkReply *replay)
{
if(replay->error() == QNetworkReply::NoError)
{
QString getData = replay->readAll();
QMessageBox msg;
if(getData == "1")
{
msg.setText("User Is not Exits");
}
else
{
QDomDocument doc;
if(doc.setContent(getData))
{
QDomElement domElem = doc.documentElement();
QDomNode n = domElem.firstChild();
while(!n.isNull()) {
QDomElement e = n.toElement(); // try to convert the node to an element.
if(!e.isNull()) {
msg.setText(e.namedItem("Image").childNodes().at(0).nodeValue());
msg.exec();
}
n = n.nextSibling();
}
}
replay->deleteLater();
}
}
}
您可以创建一个
RequestSender
类,其角色是处理请求
每个RequestSender
对象将处理一个唯一的请求。创建将要发送的QNetworkRequest
时,RequestSender
将使用originingobject
属性“标记”自己的请求。此属性指示发送请求的对象。当RequestSender
对象收到回复时,它将通过originingobject
属性查看它是否是请求的发送者。有关原始对象
的更多信息,请参阅此处的文档:
下面是一个你可以做的例子
requestsender.hpp:
class RequestSender {
public:
RequestSender();
~RequestSender();
void createRequest(/* Request parameters */);
public slots:
void endRequest(QNetworkReply* replay);
};
requestsender.cpp:
RequestSender::RequestSender() {
connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(endRequest(QNetworkReply*)));
}
RequestSender::~RequestSender() {
disconnect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(endRequest(QNetworkReply*)));
}
void RequestSender::createRequest(/* Request parameters */) {
QNetworkRequest * myRequest = 0;
// Build myRequest with the request parameters
myRequest->setOriginatingObject(this);
nam->get(*myRequest);
}
void RequestSender::endRequest(QNetworkReply* replay) {
if (replay->request().originatingObject() != this) {
// That's not the request sent by the object -> stop the method here !
return;
}
// Treatments on replay
}
使用QNetworkAccessManager执行的每个操作都将返回QNetworkReply。这也有一个信号finished()。也许你可以把这个信号连接到不同的插槽上 你的问题是什么?结果如何?是位于GetUserData()和GetMessages()内部的“连接(nam,信号(已完成)(QNetworkReply*)”,此插槽(GetUserDataCompleted(QNetworkReply*))?或者在同一个函数中?不,它们在主窗口构造函数中看到我的更新问题预期结果是什么?你目前的结果是什么?顺便说一句,你不需要连接两次,一次就足够了。然而,这不会影响结果。