2

我正在检查一些使用 QNetworkAccessManager 的简单示例,我发现了这一点(假设管理器是 QNetworkAccessManager:

QNetworkRequest request;
request.setUrl(QUrl("http://www.someserver.com"));

QNetworkReply *reply = manager->get(request);
connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
    this, SLOT(slotError(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(sslErrors(QList<QSslError>)),
    this, SLOT(slotSslErrors(QList<QSslError>)));

据我了解,对 manager->get 的调用将发送一个 GET 请求。但是,处理该请求的答案的插槽仅发送呼叫后才连接,这对我来说似乎没有意义。这是我的问题:

  • 请求完成后将插槽连接到信号不是问题吗?是否会发生请求已完成并在连接发生之前发出信号,因此信号被错过并且从未被相应的插槽处理的情况?

谢谢!

L.

更新:正如cyber_raj所指出的,这里已经回答了这个问题:Qt signal slot connection - QNetworkAccessManager

4

1 回答 1

1

不是问题。get 调用是异步的: http: //doc.qt.io/qt-5/qnetworkaccessmanager.html#details

QNetworkAccessManager 将它收到的请求排队,每次运行 6 个异步任务。因此,正如您所指出的那样,没有太大的错误空间。

但是如果你害怕你可以尝试第一个例子,连接管理器的信号:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)),
        this, SLOT(replyFinished(QNetworkReply*)));

manager->get(QNetworkRequest(QUrl("http://qt-project.org")));
于 2015-03-31T14:34:08.980 回答