Qt:在QNetworkAccessManager发送请求后连接信号

3

我正在查看一些关于使用QNetworkAccessManager的简单示例,我发现了这个(假设manager是一个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
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")));

你发布的页面上写着:“在http中,一个主机/端口组合同时执行6个请求”。如果我理解正确的话,这意味着如果同一主机/端口组合正在处理的请求少于6个,我的请求将立即执行,因此我认为问题仍然存在。 - mortadelo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接