QT 检测是否有网络

一、模拟一个请求去判断是否有网,此处需要加个事件循环,实现阻塞等待网络请求的完成。
这是因为Qt的网络模块是基于事件驱动的,网络请求的完成是通过信号和槽机制来通知的。在没有事件循环的情况下,主线程会立即执行到return语句,而此时网络请求可能还没有完成,导致无法获取到正确的网络请求结果。

二、最后在加个定时器,就算没有等到网络请求返回,超时后也会退出事件循环,可以避免网络请求长时间阻塞主线程。

cpp 复制代码
bool checkNetwork(int nTimeout = 3000)
{
	QNetworkAccessManager *netManager = new QNetworkAccessManager();
	QNetworkRequest request(QUrl("https://www.baidu.com"));
	QNetworkReply* reply = netManager->get(request);

	QEventLoop loop;
	QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
	QTimer::singleShot(nTimeout, &loop, SLOT(quit()));
	loop.exec(QEventLoop::ExcludeUserInputEvents);

	return reply->error() == QNetworkReply::NoError;
}
相关推荐
.似水18 分钟前
Python requests
开发语言·python
tanyyinyu39 分钟前
Python列表:高效灵活的数据存储与操作指南
开发语言·windows·python
沐雨潇竹1 小时前
vs2022中detach qt widgets designer
开发语言·qt
加油搞钱加油搞钱1 小时前
鹰盾加密器“一机一码”技术全维度剖析:从底层实现到生态防护体系
开发语言·网络·python
朝朝又沐沐1 小时前
基于算法竞赛的c++编程(28)结构体的进阶应用
开发语言·c++·算法
豪斯有话说1 小时前
C++_红黑树
开发语言·数据结构·c++
莱茵不哈哈1 小时前
C/C++八股文
开发语言·c++
白玉cfc2 小时前
Objective-C常用命名规范总结
开发语言·ios·objective-c
琢磨先生David2 小时前
Java 24 字符串模板:重构字符串处理的技术革新
java·开发语言
纳于大麓2 小时前
Kotlin基础语法一
android·开发语言·kotlin