gpt4 book ai didi

qt - QNetworkRequest::User 和 QNetworkRequest::UserMax 的区别

转载 作者:行者123 更新时间:2023-12-01 00:41:38 26 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

然后,由于您首先放置的属性,您可以返回您的请求:
if(reply->request().attribute(QNetworkRequest::User).toString().contains("myRequest"))
// ...

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

The default implementation of Network Access will ignore any request attributes in this range and it will not produce any attributes in this range in replies. The range is reserved for extensions of 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 = 1000 开始至 QNetworkRequest::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)对于大多数情况。实际上,与动态属性不同,属性并不是为自定义数据提供存储空间。

关于qt - QNetworkRequest::User 和 QNetworkRequest::UserMax 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37291246/

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