Qt判断网络是否在

我们已知的网络连接有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 
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 
#include 
//定义函数指针
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 也可以发邮箱[email protected]

转载于:https://www.cnblogs.com/CLXiao-1029/p/7248140.html

你可能感兴趣的:(Qt判断网络是否在)