我们已知的网络连接有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. Codechef Sad Pairs——圆方树+虚树+树上差分

    SADPAIRS 删点不连通,点双,圆方树 非割点:没有影响 割点:子树DP一下 有不同颜色,所以建立虚树 在圆方树上dfs时候 如果当前点是割点 1.统计当前颜色虚树上的不连通点对,树形DP即可 2 ...

  2. MySQL的replace方法

    mysql中replace函数直接替换mysql数据库中某字段中的特定字符串,不再需要自己写函数去替换,用起来非常的方便,mysql 替换函数replace()Update `table_name` ...

  3. Flask-SQLAlchemy 无法创建Sqlite 数据库???

    <Flask web 开发>第五章数据库照书中的方法无法创建表,没有python的命令提示符,只是运行程序输入db.create_all()后文件夹里也没有data.sqlite文件 解决 ...

  4. Java基础-比较运算符Compare Operators

    Java基础-比较运算符Compare Operators 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.关系运算符 关系运算符包括: 1>.大于(>) 2> ...

  5. sql数据库连接字符串在APP.config配置文件内的两种写法

    第一种方法 写法: <configuration> <appSettings> <add key="connectionstring" value=& ...

  6. angular.module()参数问题

    var app = angular.module('myApp', []); 第二个参数是依赖的模块,因为这里不需要依赖其它模块,因此为空,但是[]不能省略.

  7. 深度学习 vs. 概率图模型 vs. 逻辑学

    深度学习 vs. 概率图模型 vs. 逻辑学 摘要:本文回顾过去50年人工智能(AI)领域形成的三大范式:逻辑学.概率方法和深度学习.文章按时间顺序展开,先回顾逻辑学和概率图方法,然后就人工智能和机器 ...

  8. 【学习笔记】AspectJ笔记

    AspectJ的概念 是一种静态编译期增强性AOP的实现 在编译过程中修改代码加入相关逻辑,无需程序员动手 AspectJ具体用法 下载安装AspectJ,启动jar文件,安装到JDK目录,添加pat ...

  9. js调试系列: 断点与动态调试[基础篇]

    js调试系列目录: - 额,我说的不是张敬轩的 断点 这首歌,是调试用到的断点,进入正题吧. 昨天留的课后练习 1. 分析 votePost 函数是如何实现 推荐 的.其实我们已经看到了源码,只要读下 ...

  10. <dl>

    定义列表 自定义列表不仅仅是一列项目,而是项目及其注释的组合. 自定义列表以 <dl> 标签开始.每个自定义列表项以 <dt> 开始.每个自定义列表项的定义以 <dd&g ...