Qt判断网络是否在
来源:互联网 发布:网络金融考试 编辑:程序博客网 时间:2024/06/08 12:55
我们已知的网络连接有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 811 12 #include <QWidget>13 14 class isOnl : public QWidget15 {16 Q_OBJECT17 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 guinetwork
此时,我们的网络判断已经做好,接下来是如何去运用。
在头函数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
阅读全文
0 0
- Qt判断网络是否在
- Qt判断网络是否在
- Qt 判断点是否在多边形内
- 在游戏中判断网络是否连接
- Qt调用win32的dll判断是否连接上了网络
- Android-判断某个网络是否在网络列表中
- QT 判断当前焦点是否在某控件上
- Qt判断点是否在多边形区域中
- 判断网络是否正常
- 判断是否连接网络
- 判断网络是否可用
- 判断网络是否可用
- 判断网络是否连接
- 判断是否有网络
- 判断网络是否可用
- 判断网络是否存在
- 判断网络是否可用
- 判断网络是否连接
- Qt项目打包发布流程(Windows平台&动态链接)
- 中标麒麟高级服务器6.0安装JDK、MYSQL
- 文本挖掘--文本特征选择-java实现
- 算法系列——Binary Tree Zigzag Level Order Traversal
- [面试题]猴子分桃子递归超简练代码
- Qt判断网络是否在
- yarn平台的简单运行过程和任务分配
- Thread创建线程
- 使用Requests库和BeautifulSoup库来爬取网页上需要的文字与图片
- 计算机网络知识点
- 多行文字超出部分显示省略号
- __attribute__((format(printf, a, b)))
- CSU-ACM2017暑期训练12-KMP D
- Java中的匿名内部类及其使用技巧