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;
}
相关推荐
学习,学习,在学习27 分钟前
Qt工控仪器程序框架设计详解(工控多仪器控制版本)
开发语言·c++·qt
三品吉他手会点灯32 分钟前
C语言学习笔记 - 35.数据类型 - printf函数的非输出控制符与格式优化
c语言·开发语言·笔记·学习
JAVA面经实录9171 小时前
Java集合大全终极手册(一)
java·开发语言
信竞星球_少儿编程题库1 小时前
2026年全国信息素养大赛算法应用主题赛 丝路新城 C++ 模拟卷(三)
开发语言·c++
千里马-horse1 小时前
gRPC -- Java 基础教程
java·开发语言·grpc
甲方大人请饶命1 小时前
Java-面向对象进阶(qqbb知识点)
java·开发语言
ChoSeitaku1 小时前
07_static_JavaBean_继承_super/this
java·开发语言
hbugs0012 小时前
EVE-NG桥接外网的5种方式
开发语言·网络·php·eve-ng·rstp·流量洞察
wjs20242 小时前
Lua 字符串
开发语言
三品吉他手会点灯2 小时前
C语言学习笔记 - 33.数据类型 - printf函数的详细用法
c语言·开发语言·笔记·学习·算法