我们已知的网络连接有3种:拨号、使用局域网以及代理上网。

无论哪一种上网方式都可以判断网络是否畅通,借此,我们来做一个判断网络是否畅通(存在)的程序,新建一个基类为QWidget的工程,不要UI。

添加新文件:C++Class → Class Name :isonl、Base Name :QWidget

头函数 >> isonl.h。

 #ifndef ISONL_H
#define ISONL_H
//拨号
#define INTERNET_CONNECTION_MODEM 1
//局域网
#define INTERNET_CONNECTION_LAN 2
//代理上网
#define INTERNET_CONNECTION_PROXY 4
//代理被占用
#define INTERNET_CONNECTION_MODEM_BUSY 8 #include <QWidget> class isOnl : public QWidget
{
Q_OBJECT
public:
explicit isOnl(QWidget *parent = );
int a; //用来做一个标识
private slots:
void GetInternetConnectState(); //获取Internet连接状态
signals:
void returnisonline(int); //发射信号
public slots:
}; #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 = -;
QTimer *timer=new QTimer(this); //新建一个定时器对象
connect(timer,SIGNAL(timeout()),this,SLOT(GetInternetConnectState()));
timer->start(); //时间间隔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,);
if(bOnline)
{
//在线:拨号上网
if ( flags & INTERNET_CONNECTION_MODEM ) //在线:拨号上网
{
a=; } else if(flags & INTERNET_CONNECTION_LAN) //在线:通过局域网
{
a=;
}
else if(flags & INTERNET_CONNECTION_PROXY) //在线:代理
{
a=;
}
}
else
{
a = -;
}
emit returnisonline(a);//信号发射出去
}
}

在工程文件(widget.pro)中添加

QT += core gui network

此时,我们的网络判断已经做好,接下来是如何去运用。

在头函数widget.h中

 #include "isonl.h"

 //定义私有变量
private:
isOnl *online; //添加一个私有槽信号用来实现
private slots:
void showOnline(int); //添加一个信号槽函数,与之相对
signals:
void returnisonline(int);
//这个函数好像是不能被省略,我的系统是Win10测试的时候如何没有此函数,会导致出错。

在源代码widget.cpp中

 //在构造函数中添加
online = new isOnl;
connect(online,SIGNAL(returnisonline(int)),this,SLOT(showOnline(int))); //获取网络是否畅通
void Widget::showOnline(int a)
{
if(a == || a == || a == )
{
//当网络畅通时执行这里面的内容
//label2 ->setStyleSheet("background-color:lightgreen;");//浅绿
}
else if(a == -)
{
//当网络中断时执行这里面的内容
//label2 ->setStyleSheet("background-color:red;");
} }

以上就是Qt判断网络是否存在的内容,此内容还可以运用到:判断网络连接方式,有兴趣的可以尝试一下。

有问题请留言,或者联系QQ:1285015525 也可以发邮箱1285015525@qq.com

Qt判断网络是否在的更多相关文章

  1. iOS 判断网络连接状态的几种方法

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #801b80 } p.p2 ...

  2. android——判断网络状态

    平常我们玩qq的时候我们没联网 ,qq上面回显示"网络连接不给力,请检查网络连接"那么它是 通过什么方式判断网络是否连接的呢? 下面将写个案例展示如何检查网络连接状态的 由于我们这 ...

  3. Win8 app判断网络连接状态

    Win8 app判断网络连接状态 NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged; ...

  4. Reachability(判断网络是否连接)

    类似于一个网络状况的探针. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabili ...

  5. android中判断网络连接是否可用

    一.判断网络连接是否可用 public static boolean isNetworkAvailable(Context context) { ConnectivityManager cm = (C ...

  6. 判断网络是否连接 和 判断GPS是否连接

    //判断网络是否连接 public static Boolean isNetworkEnabled(Context context){ int status=-1  //设置默认连接的状态为-1 Co ...

  7. Android判断网络是否连接

    <!-- 配置文件判断网络是否连接 --> <uses-permission android:name="android.permission.ACCESS_NETWORK ...

  8. android判断网络连接状态、联网类型、运营商

    /** * 获取上网方式 * * @param mContext * @return */ public static String getNetType(Context mContext) { St ...

  9. Android判断网络状态

    package com.ch.services; import com.ch.utils.NetWorkUtils; import android.app.Service; import androi ...

随机推荐

  1. Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算)

    Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算) Description T 公司发现其研制的一个软件中有 n 个错误,随即为该软件发放 ...

  2. linux中awk工具的使用(转载)

    awk是一个非常好用的数据处理工具.相较于sed常常一整行处理,awk则比较倾向于一行当中分成数个“字段”处理,awk处理方式如下: $ awk '条件类型1{动作1} 条件类型2{动作2} ...' ...

  3. 深入理解JS this,作用域

    深入理解JS this 阮一峰博客链接http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html this ...

  4. python数字前自动补零

    >>> '%d' % 23 #输出23 ' >>> '%5d' % 23 #输出的数字前有3个空位,共占5个字符 ' >>> '%05d' % 2 ...

  5. Gulp 笔记

    Gulp是一款自动化构建工具 用npm安装 npm install -g gulp npm install --save-dev gulp 分别在全局和项目目录里安装. 然后在项目目录里创建gulpf ...

  6. DataGridView更新数据到数据库

    WinFrom程序绑定了一个DataGridView控件,我需要添加一个button按钮来更改状态,还需要把更新之后的状态更新到数据库,如下图所示的这样: 首先先来拖控件,把界面做出来,自己拖一个Da ...

  7. python 手写队列

    #encoding=utf8 class MQueue: def __init__(self): self.data = [] def get(self): if self.data.__len__( ...

  8. 《Two Dozen Short Lessons in Haskell》(二十四)代数类型

    这是<Two Dozen Short Lessons in Haskell>这本书的最后一章,第23章没有习题. 这一章里介绍了Haskell如果自定义一种类型,并且用一个双人博弈游戏为例 ...

  9. Tornado实现多线程、多进程HTTP服务

    背景 线上有一个相关百科的服务,返回一个query中提及的百科词条.该服务是用python实现的,以前通过thrift接口访问,现要将其改为通过HTTP访问.之前没有搭建HTTPServer的经验,因 ...

  10. expect 交互 telnet 交互

    telnet 交互 #!/bin/bash Ip="10.0.1.53" a="\{\'method\'\:\'doLogin\'\,\'params\'\:\{\'uN ...