This question already has an answer here:
Qt signal slot connection - QNetworkAccessManager
(1个答案)
5年前关闭。
我检查了一些使用QNetworkAccessManager的简单示例,然后发现了这一点(假设管理器是QNetworkAccessManager:
据我了解,对manager-> get的调用将发出GET请求。但是,用于处理该请求答案的插槽仅在发送 call 后才连接,这对我来说似乎没有意义。这是我的问题:
在完成请求后将插槽连接到信号不是问题吗?是否可能在连接发生之前完成请求并发出信号,从而导致信号丢失并从未被相应的插槽处理?
谢谢!
L.
更新:正如cyber_raj所指出的,此问题已在此处得到解答:Qt signal slot connection - QNetworkAccessManager
(1个答案)
5年前关闭。
我检查了一些使用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请求。但是,用于处理该请求答案的插槽仅在发送 call 后才连接,这对我来说似乎没有意义。这是我的问题:
谢谢!
L.
更新:正如cyber_raj所指出的,此问题已在此处得到解答:Qt signal slot connection - 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")));
关于c++ - Qt:在QNetworkAccessManager中发送请求后连接信号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29370840/
10-09 18:47