※ 引述《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);
}
目前是用这种方法再检测网络是否有连线