gpt4 book ai didi

qt - 我如何知道哪个 QNetworkReply 属于异步设计中的 QNetworkRequest?

转载 作者:行者123 更新时间:2023-12-03 07:33:50 25 4
gpt4 key购买 nike

我可以在 C# 中轻松获得异步设计

HttpResponseMessage response = await httpClient.GetAsync(InputAddress.Text);
{
....// run when request finished. And response closely relation to request.
}

但是我怎么能在 QT 中做到这一点?我在下面找到了一些代码。但仍有一些疑问。
  • 为什么 (sentReply == reply) 可以判断是否相同?也许我可以发送两次相同的请求,请求 A,请求 B。对应的响应是 A',B'。但响应是按照 B',A' 的顺序到达的。代码工作与否?
  • 如果我想在请求完成时运行一些代码(如上面的 c# 代码),我该怎么做?我想我可以将 UUID 绑定(bind)到每个请求或将回调函数指针绑定(bind)到请求?最好的方法是什么?
    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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com