簡體   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