1

私は単純なクラスNetworkingを持っています:

private:
    QNetworkAccessManager *httpclient;

コンストラクターでオブジェクトを作成し、シグナルとスロットを接続します。

 httpclient = new QNetworkAccessManager(this);
 connect(httpclient, SIGNAL(finished(QNetworkReply*)), this, SLOT(httpRequestFinished(QNetworkReply*)));

ここで、パブリック メソッド getPage を介して QNetworkAccessManager の get メソッドを呼び出します。

void Networking::getPage(const QString &uri)
{
  QNetworkRequest request;
  request.setUrl(uri);
  httpclient->get(request);
}

httpRequestFinishedが呼び出されることを期待していますが、そうではありません。テスト目的でこれも試しました:

void Networking::getPage(const QString &uri)
{
  QNetworkRequest request;
  request.setUrl(uri);
  reply = httpclient->get(request);
  connect(reply, SIGNAL(finished()), this, SLOT(httpReplyFinished()));
}

返信はファイルnetworking.hで適切に定義されています:

private:
 QNetworkAccessManager *httpclient;
 QNetworkReply *reply;

何も変わっていません!しかし、get-Request の後にreply->bytesAvailable()にアクセスすると、すべてのシグナルが同時に送信されます。私は今何時間も探していますが、何が間違っているのかわかりません。

4

1 に答える 1

1

だから...私は理由を見つけました-しかし正確ではありません:それはメモリ管理でした。メインウィンドウ クラスでオブジェクトをポインタとして定義する必要がありました

Networking *nw;

今、私はそれを使用することができます - たとえば、私のプッシュボタンアクションで:

nw = new Networking();
nw->getPage("my url here");

すべてが予想通りに進みました!うーん..学ぶことがたくさん

于 2010-02-09T14:33:13.033 に答える