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;
}
相关推荐
自动化和Linux14 分钟前
C语言_scanf(),strlen(),size()的特性和各自的区别
c语言·开发语言
小郝 小郝37 分钟前
51 与32 单片机LED控制详解
c语言·开发语言·经验分享·学习·51单片机
星空露珠40 分钟前
迷你世界UGC3.0脚本Wiki全局函数
开发语言·数据库·算法·游戏·lua
金山几座1 小时前
C#学习记录-类(Class)
开发语言·学习·c#
AsDuang1 小时前
Python 3.12 MagicMethods - 55 - __irshift__
开发语言·python
共享家95271 小时前
Java入门(多态)
java·开发语言
机器视觉知识推荐、就业指导2 小时前
拆 Qt,为什么要先引入libmodbus?
开发语言·qt
2401_857865232 小时前
C++模块接口设计
开发语言·c++·算法
蓝莓星冰乐2 小时前
第一章:C语言概述与环境搭建
c语言·开发语言
add45a2 小时前
嵌入式C++低功耗设计
开发语言·c++·算法