1

我有两个 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*)));
}

是否有可能在不同的插槽中获得 QNetworkReplay?

在此处输入图像描述

4

2 回答 2

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);
}

我没有尝试过并采取了一些捷径,但你得到了它的精神 =) 。似乎您可以使用答案检索请求,但我认为使用枚举更容易。

希望它有所帮助

于 2012-08-23T16:43:56.220 回答
1

您对 QNetworkAccessManager 执行的每个操作都将返回一个 QNetworkReply。这也有一个信号完成。也许您可以将此信号连接到您的不同插槽。

祝你好运

于 2012-08-23T17:15:03.397 回答