看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《uranusjr (←這人是超級笨蛋)》之銘言: : ※ 引述《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. 今天早上做完測試的回應 QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(finishedSlot(QNetworkReply*))); 當我拔掉網路線之後在finishedSlot裡面設的中斷點都不會跑進去 然後又找到這篇 https://goo.gl/PZY5O5 所以我想finished()應該是用在有"連線上"網路之後,網頁所回傳的訊息紀錄 不管是http 404之類的 然後我思考了一下我之前沒仔細想過的 要做的步驟 1.先確保本機連線沒有問題 2.然後再進行去跟web api做post&get的行為 之後我找到了 bool QNetworkConfigurationManager::isOnline() const QNetworkConfigurationManager onlineManager; if (onlineManager.isOnline()) { url post... url get.... } else { MessageBox(NULL, L"連線失敗", L"Message", MB_OK | MB_ICONINFORMATION); } 目前是用這種方法再檢測網路是否有連線 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.46.66 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1477449131.A.DB7.html