Qt 判断网络连接
前言
在Qt中判斷網(wǎng)絡(luò)是否連接有兩種方式,其中一種是網(wǎng)絡(luò)連接但是不一定能上網(wǎng),可能只是連接了網(wǎng)線或者Wi-Fi,但不一定能夠上互聯(lián)網(wǎng)。另一種判斷該網(wǎng)絡(luò)是否可以連接互聯(lián)網(wǎng),兩種情況的判別方式有所區(qū)別。
正文
第一種:只需要判斷網(wǎng)絡(luò)是否有連接,不一定能上網(wǎng)
這個(gè)很簡(jiǎn)單,直接通過(guò)Qt的類(lèi)QNetworkConfigurationManager自帶的函數(shù)就可以判斷(該方法也適用于Android平臺(tái)):
bool CommonParameter::isNetWorkOnline() {QNetworkConfigurationManager mgr;return mgr.isOnline(); }第二種:判斷是否能上網(wǎng)
這種方式是檢查是否連接互聯(lián)網(wǎng),原理:通過(guò)訪問(wèn)指定的網(wǎng)站,如果能訪問(wèn)成功表示已正常連接。
void CommonParameter::checkNetWorkOnline() {QHostInfo::lookupHost("www.baidu.com",this,SLOT(onLookupHost(QHostInfo))); }void CommonParameter::onLookupHost(QHostInfo host) {if (host.error() != QHostInfo::NoError) {qDebug() << "Lookup failed:" << host.errorString();//網(wǎng)絡(luò)未連接,發(fā)送信號(hào)通知emit sigLookUpHostResult(false);}else{emit sigLookUpHostResult(true);} }通過(guò)靜態(tài)函數(shù)QHostInfo::lookupHost訪問(wèn)指定網(wǎng)絡(luò)后會(huì)將結(jié)果返回到槽里面,然后再將結(jié)果發(fā)送信號(hào)出去。
監(jiān)測(cè)網(wǎng)絡(luò)變化
第一種方法可以獲取到當(dāng)前網(wǎng)絡(luò)狀態(tài),但是如果要實(shí)時(shí)監(jiān)測(cè)到網(wǎng)絡(luò)變化,可以通過(guò)QNetworkConfigurationManager中的信號(hào)來(lái)獲取,如下
void onlineStateChanged(bool isOnline)官方說(shuō)明:This signal is emitted when the device changes from online to offline mode or vice versa. isOnline represents the new state of the device.
The state is considered to be online for as long as allConfigurations(QNetworkConfiguration::Active) returns a list with at least one entry.
所以,可以通過(guò)連接這個(gè)信號(hào)來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)測(cè),親測(cè)可用。
總結(jié)
- 上一篇: Qt QWidget实现消息提示控件Ti
- 下一篇: Qt Scene graph画线