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;
}
相关推荐
穿西装的水獭1 小时前
python将Excel数据写进图片中
开发语言·python·excel
老友@1 小时前
Java Excel 导出:EasyExcel 使用详解
java·开发语言·excel·easyexcel·excel导出
tryCbest2 小时前
Python基础之爬虫技术(一)
开发语言·爬虫·python
hixiong1232 小时前
C# OpenCVSharp实现Hand Pose Estimation Mediapipe
开发语言·opencv·ai·c#·手势识别
集成显卡2 小时前
AI取名大师 | PM2 部署 Bun.js 应用及配置 Let‘s Encrypt 免费 HTTPS 证书
开发语言·javascript·人工智能
AI小云2 小时前
【Numpy数据运算】数组间运算
开发语言·python·numpy
是苏浙2 小时前
零基础入门C语言之C语言实现数据结构之单链表经典算法
c语言·开发语言·数据结构·算法
纵有疾風起2 小时前
C++—vector:vecor使用及模拟实现
开发语言·c++·经验分享·开源·stl·vector
任子菲阳3 小时前
学Java第四十三天——Map双列集合
java·开发语言
wearegogog1233 小时前
基于MATLAB的谷物颗粒计数方法
开发语言·matlab