c++ - QNetworkAccessManager 连接到 2 个回复槽,我怎么知道哪个回复属于哪个请求

标签 c++ qt qt5 qnetworkrequest

我的应用程序中有 1 个 QNetworkAccessManager,我同时发出 2 个请求。当我从经理那里得到回复时,回复的顺序不符合我给他们打电话的顺序,这是有道理的。我该如何解决这个问题?我是否应该让另一位经理来排除任何请求队列问题?

QNetworkRequest request1(ONE_GET);
request1.setRawHeader("Content-Type", "application/vnd.api+json");
request1.setRawHeader("Accept", "application/vnd.api+json");  
m_nam.get(request1);

connect(&m_nam, &QNetworkAccessManager::finished,this , &HelperClass::onReply1Recieved);

QNetworkRequest request2(TWO_GET);
request2.setRawHeader("Content-Type", "application/vnd.api+json");
request2.setRawHeader("Accept", "application/vnd.api+json");

m_nam.get(request2);

connect(&m_nam, &QNetworkAccessManager::finished,this , &HelperClass::onReply2Recieved);

最佳答案

您遇到的问题是两个插槽都连接到同一个信号,因此两者都会收到通知,即使您尝试断开不能保证其正常工作的信号,解决方案是连接每个插槽的信号QNetworkReply 的:

QNetworkRequest request1(ONE_GET);
request1.setRawHeader("Content-Type", "application/vnd.api+json");
request1.setRawHeader("Accept", "application/vnd.api+json");  
QNetworkReply *reply1 = m_nam.get(request1);
connect(reply1, &QNetworkReply::finished, this, &HelperClass::onReply1Recieved);


QNetworkRequest request2(TWO_GET);
request2.setRawHeader("Content-Type", "application/vnd.api+json");
request2.setRawHeader("Accept", "application/vnd.api+json");
QNetworkReply *reply2 = m_nam.get(request2);
connect(reply2, &QNetworkReply::finished, this, &HelperClass::onReply2Recieved);

void HelperClass::onReply1Recieved(){
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    qDebug() << reply->readAll();
}

void HelperClass::onReply2Recieved(){
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    qDebug() << reply->readAll();
}

关于c++ - QNetworkAccessManager 连接到 2 个回复槽,我怎么知道哪个回复属于哪个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53164113/

相关文章:

c++ - C++ 中的 strcat 函数

qt - 如何将 Clojure REPL 与 Qt Jambi 一起使用?

c++ - 以 "Release with Debug Info"模式构建 Qt?

qt - 如何将TabView的选项卡排列成多行?

c++ - 如何获得禁用的 QAction 元素的触发信号?

c++ - 用于调试的未初始化内存的常见值是什么?

c++ - DirectX D3DXVec3规范化未解析的外部符号

c++ - 安卓 NDK + Eclipse : No such file or directory

c++ - 如何防止 QStringBuilder 超出其初始化范围

c++ - 如何更改 QProgressBar 的状态?