我检查了一些使用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信号插槽连接-QNetworkAccessManager
没问题。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")));