作者checkIO (chec)
看板C_and_CPP
標題[問題] QT SLOT多參數問題
時間Wed Oct 26 13:34:12 2016
開發平台(Platform): (Ex: Win10, Linux, ...)
VS2015
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
QT5.7
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
我目前寫了一個跟WEB API溝通的方法,但可能會因為呼叫他的人不一樣
(EX login or upLoad 去CALL它)
server 回傳回來的值不一樣要做額外的處理,我也同樣是使用
QNetworkAccessManager的finished去接傳回來的值
然後再用SLOT(whenFinished(QNetworkReply*))這個方法去解析回傳的值
請問我在whenFinished裡面有辦法取得是哪個行為(login or upLoad)
去呼叫webApiConn的嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.46.82
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1477460054.A.11C.html
1F:推 soheadsome: 全域變數 10/26 14:12
2F:→ uranusjr: 比較好的方法是用不同的 manager, 然後用 sender() 判斷 10/26 15:58
3F:→ uranusjr: 另一個方法是用 lambda slot 語法寫成 closure 10/26 15:58
請問樓上大大的意思是
行為1 Login
QNetworkAccessManager manager1
行為2 upLoad
QNetworkAccessManager manager2
然後
connect(manager1, SIGNAL(finished()), this, SLOT(whenFinished()))
connect(manager2, SIGNAL(finished()), this, SLOT(whenFinished()))
因為都同樣會call到whenFinished()這個方法
所以我在whenFinished裡面去取得誰是sender()就可以知道是哪個行為了嗎
====================================================
我懂了 我用QObject::sender() 但如果都是同一個
QNetworkAccessManager class 那這一招就對我沒有用了
除非我要使用不同class的Network Manager
※ 編輯: checkIO (59.124.46.66), 10/26/2016 17:59:35
5F:→ legnaleurc: 應該可以直接從 reply 拿到當初的 request object 10/29 19:14
6F:推 godspeedlee: 改用curl(誤) 11/01 00:17