作者uranusjr (←这人是超级笨蛋)
看板C_and_CPP
标题Re: [问题] qt语法疑问
时间Tue Oct 25 18:20:45 2016
※ 引述《MOONY135 (谈无慾)》之铭言:
: https://gist.github.com/Aix-Shiao/c9ce0d79d373887e914b78700f564f0b
: 我有延伸的问题,目前我需要跟webApi沟通
: 我写了一个webApiPost的方法
: 在
: manager = new QNetworkAccessManager(this);
: QNetworkReply* reply = manager->post(QNetworkRequest(qurl), multiPart);
: 这行的reply我理解为 manager再丢入post资讯之後,网页端所回传给我的讯息
: 那我想问
: 1. 如果当下丢这行的时候是没有网路的状态? 我要怎样确认网路是否通畅?
: 因为网路不通的时候
: QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), this,
: SLOT(finishedSlot(QNetworkReply*)));
: manager所发出finished的SIGNAL应该是永远不会有回应的吧?
: 2.
: QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), this,
: SLOT(finishedSlot(QNetworkReply*)));
: 为什麽是finished(QNetworkReply*) 而不是finished(reply)呢?
说是延伸, 其实这和前面一个问题没什麽关联, 所以引文就删了
假设你用 Qt 5, 根据文件
http://doc.qt.io/qt-5/qnetworkaccessmanager.html
finished() 在 request 失败的时候也是会被呼叫的
其实这你自己把网路通通拔掉试试看就知道了吧?
根据 QNetworkReply 的文件
http://doc.qt.io/qt-5/qnetworkreply.html
error(QNetworkReply::NetworkError) 底下
This signal is emitted when the reply detects an error in processing.
The finished() signal will probably follow, indicating that the
connection is over.
然後 finished() 有写
This signal is emitted in tandem with QNetworkAccessManager::finished()
where that signal's reply parameter is this object.
这代表当你送出一个 request 获得 reply 物件, 但 request 失败时
会触发 QNetworkReply 的 error(QNetworkReply::NetworkError)
接着是 QNetworkReply::finished()
最後是 QNetworkAccessManager::finished(QNetworkReply *)
而最後一个 finished signal 传入的 QNetworkReply * 就是你获得的那个 reply
因为 SLOT() macro 接受的是 slot
signature
你在里面填写的会是你的 slot function 的 definition, 而非你想传什麽进去
被传入的东西是由 Qt 的 signal-slot system 为你决定
你现在比较需要的应该是
1. 思考一下语法的道理, 而不是一股脑写
2. 阅读文件, 做几个 proof of concept 验证 framework 行为, 而不是自己瞎猜
--
Les grandes et les meilleurs
tone from "Zadok the Priest"
Eine grosse stattliche Veranstaltung
by F. Handel
THE MAIN EVENT! These are the men
Sie sind die Besten
"Champions League" by Tony Britten THESE ARE THE CHAMPIONS!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.161.94.175
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1477390850.A.29F.html
1F:→ MOONY135: 会被呼叫但传回来会是空的东西 还是很感谢你 目前也觉得 10/25 19:42
2F:→ MOONY135: 越写越觉得脚步空空的 10/25 19:42
3F:→ xvid: 推最後一句 10/25 22:35
4F:→ MOONY135: 有个疑问 我把自己的网路线拔掉时 finished() 10/26 09:01
5F:→ MOONY135: 会没有回应... 10/26 09:01
7F:→ MOONY135: 所以我应该寻找其他的类别? 10/26 09:42
8F:→ MOONY135: 拔掉网路线之後 QNetworkAccessManager的finished不会有 10/26 10:03
9F:→ MOONY135: SIGNAL传出... 10/26 10:03
10F:→ uranusjr: 可以先检查 manager->networkAccessible() 10/26 15:55
11F:→ uranusjr: 发现你有另外回了, 可以把这两个检查合并使用 10/26 15:56
12F:→ MOONY135: 感谢 我目前是用我回的那个先去检查 10/26 17:07