作者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/cn.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