2

サーバーに投稿リクエストを送信したいのですが、次のようにします。

function makePost(){
    QNetworkAccessManager *networkManager = new QNetworkAccessManager();

    qDebug()<<"1";
    bool ret = connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(serviceRequestFinished(QNetworkReply*)));
    qDebug()<<"2: " <<ret;

    QUrl serviceUrl = QUrl("http://someurl/json");
    QNetworkRequest request(serviceUrl);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

    QString content = "";
    networkManager->post(request, content.toUtf8());
}

しかし、スロットserviceRequestFinished()はまったく呼び出されません! Wireshark を使用してリクエスト/レスポンスを追跡したところ、リクエスト (投稿) が送信され、サーバーがステータス200(ok) を含むレスポンスを返すことがわかりました。また、ret変数は を返しますtrue。つまり、信号とスロットの間の接続が正常に行われました。これがうまくいかない理由を知っている人はいますか?ありがとうございました!:)

編集

問題を引き起こすコード - 私の答えを見てください - はこれです:

{    
     MyObjectWithSlot obj;
     obj.makePost();
}
4

2 に答える 2

4

わかりましたので、間違いを見つけました!私の答えや質問が欲しいだけ反対票を投じることができますが、他の誰かが同様の問題を抱えている場合は答えたいと思います!

気をつけて!スロットを持つオブジェクトはスコープ内にある必要があり、スロットが呼び出される前に終了 (破棄) されないようにする必要があります。私の質問の編集部分でわかるように、オブジェクトが作成され、関数が呼び出され、範囲外になります!

{
    MyObjectWithSlot obj;
    return obj.makePost();
}
于 2015-02-11T09:53:47.953 に答える