已经弃坑,不再使用Qt工具,有疑问可以查阅博主的其它博客,看看有没有解决方案,如果还没有可以百度或Google搜一下其他博主的教程!谢谢~
我们已知的网络连接有3种:拨号、使用局域网以及代理上网。
无论哪一种上网方式都可以判断网络是否畅通,借此,我们来做一个判断网络是否畅通(存在)的程序,新建一个基类为QWidget的工程,不要UI。
添加新文件:C++Class → Class Name :isonl、Base Name :QWidget
头函数 >> isonl.h。
1 #ifndef ISONL_H
2 #define ISONL_H
3 //拨号
4 #define INTERNET_CONNECTION_MODEM 1
5 //局域网
6 #define INTERNET_CONNECTION_LAN 2
7 //代理上网
8 #define INTERNET_CONNECTION_PROXY 4
9 //代理被占用
10 #define INTERNET_CONNECTION_MODEM_BUSY 8
11
12 #include <QWidget>
13
14 class isOnl : public QWidget
15 {
16 Q_OBJECT
17 public:
18 explicit isOnl(QWidget *parent = 0);
19 int a; //用来做一个标识
20 private slots:
21 void GetInternetConnectState(); //获取Internet连接状态
22 signals:
23 void returnisonline(int); //发射信号
24 public slots:
25 };
26
27 #endif // ISONL_H
源代码 >> isonl.cpp
#include "isonl.h"
#include <QLibrary>
#include <QTimer>
//定义函数指针
typedef bool (*ConnectFun)(int* lpdwFlags,int dwReserved);
isOnl::isOnl(QWidget *parent) : QWidget(parent)
{
a = -1;
QTimer *timer=new QTimer(this); //新建一个定时器对象
connect(timer,SIGNAL(timeout()),this,SLOT(GetInternetConnectState()));
timer->start(100); //时间间隔1秒。每1秒获取一次,
GetInternetConnectState();
}
//获得联网方式
void isOnl::GetInternetConnectState()
{
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)
{
//在线:拨号上网
if ( flags & INTERNET_CONNECTION_MODEM ) //在线:拨号上网
{
a=1;
} else if(flags & INTERNET_CONNECTION_LAN) //在线:通过局域网
{
a=2;
}
else if(flags & INTERNET_CONNECTION_PROXY) //在线:代理
{
a=4;
}
}
else
{
a = -1;
}
emit returnisonline(a);//信号发射出去
}
}
在工程文件(widget.pro)中添加
1 QT += core gui network
此时,我们的网络判断已经做好,接下来是如何去运用。
在头函数widget.h中
1 #include "isonl.h"
2
3 //定义私有变量
4 private:
5 isOnl *online;
6
7 //添加一个私有槽信号用来实现
8 private slots:
9 void showOnline(int);
10
11 //添加一个信号槽函数,与之相对
12 signals:
13 void returnisonline(int);
14 //这个函数好像是不能被省略,我的系统是Win10测试的时候如何没有此函数,会导致出错。
在源代码widget.cpp中
1 //在构造函数中添加
2 online = new isOnl;
3 connect(online,SIGNAL(returnisonline(int)),this,SLOT(showOnline(int)));
4
5 //获取网络是否畅通
6 void Widget::showOnline(int a)
7 {
8 if(a == 1 || a == 2 || a == 4)
9 {
10 //当网络畅通时执行这里面的内容
11 //label2 ->setStyleSheet("background-color:lightgreen;");//浅绿
12 }
13 else if(a == -1)
14 {
15 //当网络中断时执行这里面的内容
16 //label2 ->setStyleSheet("background-color:red;");
17 }
18
19 }
以上就是Qt判断网络是否存在的内容,此内容还可以运用到:判断网络连接方式,有兴趣的可以尝试一下。
有问题请留言,或者联系QQ:1285015525 也可以发邮箱1285015525@qq.com。(本文只出现在Aili_Xiao的博客中,目前在博客园和CDSN中)