Re: [問題] qt語法疑問

作者: MOONY135 (談無慾)   2016-10-26 10:32:09
※ 引述《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);
}
目前是用這種方法再檢測網路是否有連線

Links booklink

Contact Us: admin [ a t ] ucptt.com