QNetworkRequest::User和QNetworkRequest::UserMax之间的差异



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

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

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

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

request->setAttribute(QNetworkRequest::User, QVariant("myRequest")); 

然后,由于你放在第一位的属性,你得到了你的请求:

if(reply->request().attribute(QNetworkRequest::User).toString().contains("myRequest"))
// ...

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

网络访问的默认实现将忽略任何请求属性,并且它不会在中生成任何属性这个范围的答复。该范围是为的扩展而保留的QNetworkAccessManager。

简而言之,您需要对QNetworkAccessManager进行子类化以使用QNetworkRequest::UserQNetworkRequest::UserMax属性。这里有一个非常简单的例子:

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::Attributeenum,并且为您提供了从QNetworkRequest::User = 1000QNetworkRequest::UserMax = 32767的全套自定义值。因此,当您为请求设置属性时,可以这样做:

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"));

注意:尽管属性看起来很有用,但在大多数情况下,您可能希望使用setProperty(const char*name,const QVariant&value)。事实上,与动态属性不同,属性并不是为自定义数据提供存储的。

相关内容

  • 没有找到相关文章

最新更新