Qt QNetworkAccessManager&多个QNetworkReplay

时间:2012-08-23 11:43:17

标签: qt http qnetworkaccessmanager

我有两个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?

enter image description here

2 个答案:

答案 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。这也有一个完成的信号。也许您可以将此信号连接到不同的插槽。

祝你好运