我有两个http get方法。
首先获取UserID,其次是获取有关当前用户的完整信息;
我想用不同的插槽处理完成的牌号
使用GetUserIDCompleted处理GetUserID并使用GetUserDetailsCompleted处理GetUserDetails
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
nam = new QNetworkAccessManager(this);
GetUserID();
connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(GetUserIDCompleted(QNetworkReply*)));
GetUserDetails();
connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(GetUserDetailsCompleted(QNetworkReply*)));
}
是否有可能在不同的SLOTS中获得QNetworkReplay?
答案 0 :(得分:4)
也许你可以这样做:拥有不同方法的枚举
enum GetMethod
{
getUserId,
getUserDetails
};
你保留了回复的哈希值和相应的方法:
QHash<QNetworkReply*, GetMethod> hash;
QNetworkReply *reply1 = nam->post(requestUserId, data);
hash[reply1] = GetMethod::getUserId;
QNetworkReply *reply2 = nam->post(requestUserDetails, data);
hash[reply2] = GetMethod::getUserDetails;
connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(finished(QNetworkReply*)));
并有一个调用正确功能的插槽
void MainWindow::finished(QNetworkReply *reply)
{
switch(hash[reply])
{
case GetMethod::getUserId:
GetUserIDCompleted(reply);
break;
case GetMethod::getUserDetails:
GetUserDetailsCompleted(reply);
break;
}
hash.remove(reply);
}
我没有尝试过并采取了一些快捷方式,但你得到了它的精神=)。您似乎可以使用答案检索请求,但我认为使用枚举更容易。
希望有所帮助
答案 1 :(得分:1)
使用QNetworkAccessManager执行的每个操作都将返回QNetworkReply。这也有一个完成的信号。也许您可以将此信号连接到不同的插槽。
祝你好运