我可以在 C# 中轻松获得异步设计
HttpResponseMessage response = await httpClient.GetAsync(InputAddress.Text);
{
....// run when request finished. And response closely relation to request.
}
但是我怎么能在 QT 中做到这一点?我在下面找到了一些代码。但仍有一些疑问。
QNetworkAccessManager *manager=new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(requestFinished(QNetworkReply*)));
QNetworkRequest request(QUrl(serverUrl));
QNetworkReply *sentReply = manager->post(request, buffer.toUtf8());
void requestFinished(QNetworkReply *reply)
{
QByteArray msg = reply->readAll();
if (sentReply == reply)
qDebug("this is it");
}
最佳答案
我建议如下:
使用动态属性将自定义属性添加到 QNetworkReply。
在完成的 Slot 中,您可以访问它们并调用相应的方法。
例子:
QNetworkReply *reply =
networkAccessManager->get(QNetworkRequest(QUrl("http://url.com"));
reply->setProperty("login", QVariant("logindata");
connect(reply, SIGNAL(finished()), this, SLOT(replyFinished()));
回复已完成的插槽:
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
if (reply) {
if (reply->error() == QNetworkReply::NoError) {
QString myCustomData = reply->property("login").toString();
if(myCustomData =="logindata")
//do something
}
reply->deleteLater();
}
关于qt - 我如何知道哪个 QNetworkReply 属于异步设计中的 QNetworkRequest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23881655/