Qt判断网络是否在
我们已知的网络连接有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判断网络是否在的更多相关文章
- iOS 判断网络连接状态的几种方法
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #801b80 } p.p2 ...
- android——判断网络状态
平常我们玩qq的时候我们没联网 ,qq上面回显示"网络连接不给力,请检查网络连接"那么它是 通过什么方式判断网络是否连接的呢? 下面将写个案例展示如何检查网络连接状态的 由于我们这 ...
- Win8 app判断网络连接状态
Win8 app判断网络连接状态 NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged; ...
- Reachability(判断网络是否连接)
类似于一个网络状况的探针. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabili ...
- android中判断网络连接是否可用
一.判断网络连接是否可用 public static boolean isNetworkAvailable(Context context) { ConnectivityManager cm = (C ...
- 判断网络是否连接 和 判断GPS是否连接
//判断网络是否连接 public static Boolean isNetworkEnabled(Context context){ int status=-1 //设置默认连接的状态为-1 Co ...
- Android判断网络是否连接
<!-- 配置文件判断网络是否连接 --> <uses-permission android:name="android.permission.ACCESS_NETWORK ...
- android判断网络连接状态、联网类型、运营商
/** * 获取上网方式 * * @param mContext * @return */ public static String getNetType(Context mContext) { St ...
- Android判断网络状态
package com.ch.services; import com.ch.utils.NetWorkUtils; import android.app.Service; import androi ...
随机推荐
- Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算)
Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算) Description T 公司发现其研制的一个软件中有 n 个错误,随即为该软件发放 ...
- linux中awk工具的使用(转载)
awk是一个非常好用的数据处理工具.相较于sed常常一整行处理,awk则比较倾向于一行当中分成数个“字段”处理,awk处理方式如下: $ awk '条件类型1{动作1} 条件类型2{动作2} ...' ...
- 深入理解JS this,作用域
深入理解JS this 阮一峰博客链接http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html this ...
- python数字前自动补零
>>> '%d' % 23 #输出23 ' >>> '%5d' % 23 #输出的数字前有3个空位,共占5个字符 ' >>> '%05d' % 2 ...
- Gulp 笔记
Gulp是一款自动化构建工具 用npm安装 npm install -g gulp npm install --save-dev gulp 分别在全局和项目目录里安装. 然后在项目目录里创建gulpf ...
- DataGridView更新数据到数据库
WinFrom程序绑定了一个DataGridView控件,我需要添加一个button按钮来更改状态,还需要把更新之后的状态更新到数据库,如下图所示的这样: 首先先来拖控件,把界面做出来,自己拖一个Da ...
- python 手写队列
#encoding=utf8 class MQueue: def __init__(self): self.data = [] def get(self): if self.data.__len__( ...
- 《Two Dozen Short Lessons in Haskell》(二十四)代数类型
这是<Two Dozen Short Lessons in Haskell>这本书的最后一章,第23章没有习题. 这一章里介绍了Haskell如果自定义一种类型,并且用一个双人博弈游戏为例 ...
- Tornado实现多线程、多进程HTTP服务
背景 线上有一个相关百科的服务,返回一个query中提及的百科词条.该服务是用python实现的,以前通过thrift接口访问,现要将其改为通过HTTP访问.之前没有搭建HTTPServer的经验,因 ...
- expect 交互 telnet 交互
telnet 交互 #!/bin/bash Ip="10.0.1.53" a="\{\'method\'\:\'doLogin\'\,\'params\'\:\{\'uN ...