首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QNetworkRequest::User和QNetworkRequest::UserMax之间的区别

QNetworkRequest::User和QNetworkRequest::UserMax之间的区别
EN

Stack Overflow用户
提问于 2016-05-18 05:47:27
回答 1查看 1.3K关注 0票数 4

我在QNetworkRequest文档中找到了QNetworkRequest::User和QNetworkRequest::UserMax,但根据所找到的解释,我无法理解每个文档的含义。

每个词的含义是什么,它们之间有什么区别?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-18 07:50:37

首先,两种方法都用于通过方法QNetWorkRequest将属性设置为setAttribute(Attribute code, const QVariant &value)。例如,如果有两个函数以相同的URL启动QNetworkRequest,但它们使用数据的方式不同,并且您需要知道QNetworkRequest的起源位置,那么您将需要使用一个属性。

首先,将属性设置为请求:

代码语言:javascript
复制
request->setAttribute(QNetworkRequest::User, QVariant("myRequest")); 

然后,由于您首先添加的属性,您的请求将返回:

代码语言:javascript
复制
if(reply->request().attribute(QNetworkRequest::User).toString().contains("myRequest"))
// ...

但是:您需要自己的实现来使用特殊类型的属性。正如您在文档中所读到的:

Network的默认实现将忽略此范围内的任何请求属性,并且不会在答复中生成此范围内的任何属性。这个范围是为QNetworkAccessManager的扩展保留的。

简而言之,您需要子类QNetworkAccessManager来使用QNetworkRequest::UserQNetworkRequest::UserMax属性。下面是一个非常简单的例子:

代码语言:javascript
复制
class MyNetworkAccessManager : public QNetworkAccessManager 
{
    public:
    enum myAttribute { Attribute1 = QNetworkRequest::User, Attribute2 };

    protected:

    QNetworkReply * createRequest ( Operation op, const QNetworkRequest & request, QIODevice * data = 0 ) 
    {
        QNetworkReply *reply = QNetworkAccessManager::createRequest(op, request, data);
        if(request.attribute(Attribute1).isValid()) reply->setAttribute(Attribute1, request.attribute(Attribute1));
        if(request.attribute(Attribute2).isValid()) reply->setAttribute(Attribute2, request.attribute(Attribute2));
        return reply;
     }
 };

现在,关于这两个人之间的区别:没有。它们是一样的。QNetworkRequest::UserMax 只是一个上限。

实际上,QNetworkRequest::Attribute是一个enum,您可以从QNetworkRequest::User = 1000QNetworkRequest::UserMax = 32767获得一系列的自定义值。因此,当您将属性设置为请求时,您可以这样做:

代码语言:javascript
复制
request->setAttribute(QNetworkRequest::User, QVariant("myRequest")); 
request->setAttribute(QNetworkRequest::User + 1, QVariant("myRequest1"));
request->setAttribute(QNetworkRequest::User + 100, QVariant("myRequest100"));
request->setAttribute(QNetworkRequest::UserMax, QVariant("lastRequest"));

NB :虽然属性看起来很有用,但大多数情况下您可能希望使用(名称,const QVariant &value)。实际上,与动态属性不同,属性并不能为自定义数据提供存储。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37291246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档