1

2 つの http get メソッドがあります。

1 つ目は UserID の取得で、2 つ目は現在のユーザーに関する完全な情報を取得することです。

異なるスロットで完成したサインラスを処理したい

GetUserID finished を GetUserIDCompleted で処理し、GetUserDetails を GetUserDetailsCompleted で処理します。

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

適切な関数を呼び出す 1 つのスロットを用意する

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 に答える