Ubuntu中基於QT的系統網線連線狀態的實時監視
阿新 • • 發佈:2019-02-11
1.必要準備
需包: #include <QNetworkInterface>
2.實現獲取當前的網線連線狀態
以下是自己在網路上搜到的一個解決方法,且沒有加入iface.flags().testFlag(QNetworkInterface::IsRunning) 這一邏輯判斷,經測試實時性極不可靠,在虛擬機器裡除錯時發現有時候有10s左右的延遲,但執行在嵌入式系統上時幾乎就是一擺設。於是自己閱讀QT幫助嘗試了多種方法並加以改造,發現加入了第二項條件判斷後,結果就非常的可靠了。
bool isConnectedToNetwork() { QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces(); bool isConnected = false; for (int i = 0; i < ifaces.count(); i++) { QNetworkInterface iface = ifaces.at(i); if ( iface.flags().testFlag(QNetworkInterface::IsUp) && iface.flags().testFlag(QNetworkInterface::IsRunning) && !iface.flags().testFlag(QNetworkInterface::IsLoopBack) ) { // this loop is important for (int j=0; j<iface.addressEntries().count(); j++) { // we have an interface that is up, and has an ip address // therefore the link is present // we will only enable this check on first positive, // all later results are incorrect if (isConnected == false) isConnected = true; } } } return isConnected; }
3. 實時性監測實現
實時性的實現是利用了QT的定時器和訊號與槽機制。這個大家甚至比我都清楚,就不囉嗦了。