第一种方法:可行 - 但受限
<QNetworkConfigurationManager>类
QNetworkConfigurationManager mgr;
if(!mgr.isOnline()){
qDebug() << "没有连接网络";
}else{
qDebug() << "当前已联网";
}
【注意】:
此种方法在一些版本上不能适用,版主 测试通过 版本: QT5.12.5
【注意】
拔掉网线,出现网络一直连接状态
查看:网络连接 中,是否存在 ‘虚拟网卡’ 若存在,且处于链接状态,则 就算断网 也会 一直连接状态
第二种方法:不可用
<QHostInfo>
heart_timer = new QTimer(this);
connect(heart_timer, SIGNAL(timeout()), this, SLOT(onHeartTimeOutSlot()));
heart_timer->start(3 * 1000);
void EnterpriseWebSocketClient::onHeartTimeOutSlot()
{
QHostInfo::lookupHost("www.baidu.com", this, SLOT(lookUp(QHostInfo)));
}
void EnterpriseWebSocketClient::lookUp(const QHostInfo &host)
{
if (host.error() != QHostInfo::NoError)
{
qDebug() << "当前没有网络";
}
else
{
QString ADD = host.addresses().first().toString();
qDebug() << "当前已联网";
}
}
在拔网线后,再插上,一直显示 当前已联网 - 不可用
第三种方法:C++ 可用
使用 Wininet.dll
#include <QLibrary>
typedef bool(*ConnectFun)(int* lpdwFlags, int dwReserved);
{
QLibrary lib("Wininet.dll");
//如果正确加载了dll
if (lib.load())
{
bool bOnline = false;//是否在线
int flags;
//获取dll库中的函数InternetGetConnectedState函数地址`
ConnectFun myConnectFun = (ConnectFun)lib.resolve("InternetGetConnectedState");
//判断是否连网
bOnline = myConnectFun(&flags, 0);
if (bOnline)
{
qWarning() << "network is Online ";
}
else
{
qWarning() << "network is not Online";
}
}