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

标签 qt qt5

我可以在 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/

    相关文章:

    c++ - 如何将 Crypto++ 库添加到 Qt 项目中

    c++ - 如何使用 Qt5 编译 Qt FTP webkit 示例?

    cmake - 使用 Cmake 和 Qt5 进行自动翻译管理

    c++ - 包含库时找不到 Qt shared_ptr

    python - 如何传递Pyside2中要调用的函数?

    c++ - 是否可以设置toolTip出现在QGraphicsItem上的时间?

    c++ - Q_INVOKABLE 是否需要在 Qt5 中从 QML 调用公共(public) QObject 函数?

    c++ - 在单独的 GUI 类(菜单、工具栏等)之间共享操作的最佳方式是什么?

    c++ - Qt 菜单栏不显示

    c++ - QT 4 <->QT 5 编码