繁体   English   中英

获取在replyFinished()中启动QNetworkRequest的函数

[英]Get function which initiated QNetworkRequest in replyFinished()

我有以下问题:

我有一个类Foo,它封装了一个web-api。 界面具有以下功能:

Foo :: addItem(QString id)
Foo :: updateItem(QString id)

两个函数都使用相同的 URL启动QNetworkRequest,但数据的使用情况不同。 因此我需要知道QNetworkRequest发起的插槽函数Foo :: replyFinished(QNetworkReply * wf_reply)

你怎么解决这个问题?

我可以使用变量存储QNetworkRequest的地址,以便稍后将其与wf_reply-> request()进行比较,但这对我来说似乎是一个黑客攻击。 考虑到你可以在第一次执行replyFinished()之前调用addItem()或updateItem()一百次。 最好的方法是向QNetworkRequest添加一个包含函数名称或id的sting或整数。

在原始的QNetworkRequest您可以使用设置属性

setAttribute(Attribute code, const QVariant & value)

Attribute是一个枚举,只有这种情况有一个保留代码, QNetworkRequest::User (参见: 属性

QNetworkReply ,您可以使用request()获取QNetworkRequest ,然后使用attribute()从那里获取Attribute

一点点黑客,但我认为它应该工作。

您有四种选择:

  1. 使用处理特定类型请求的某个函数连接您创建的每个回复的void QNetworkReply::finished()信号
  2. 如Brian所建议的那样在QNetworkRequest中使用setAttribute()
  3. 使用为此目的添加的void QNetworkRequest::setOriginatingObject(QObject * object) 您遇到的问题是两种请求都来自同一个QObject。 您可以创建两个虚拟QObject,仅用于将其地址发送到标记请求,或者您可以使用reinterpret_cast将请求类型作为指针传达。
  4. 按照您的建议自行跟踪已启动的请求。 因为一次可以有任意数量的请求,所以你必须使用两个指针列表(每种请求一个),例如

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM