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;
}
相关推荐
Dxy12393102161 小时前
Python 根据列表中某字段排序:从基础到进阶
开发语言·windows·python
competes1 小时前
学生需求 交易累计积分,积分兑换奖品
java·大数据·开发语言·人工智能·java-ee
splage1 小时前
Java进阶——IO 流
java·开发语言·python
青桔柠薯片1 小时前
从C语言到裸机运行:i.MX6ULL 的 GPIO 控制与编译链接过程分析
c语言·开发语言·imx6ull
OasisPioneer1 小时前
现代 C++ 全栈教程 - Modern-CPP-Full-Stack-Tutorial
开发语言·c++·开源·github
weixin_537590452 小时前
《C程序设计语言》练习答案(练习1-13)
c语言·开发语言·c#
橙露2 小时前
JavaScript 异步编程:Promise、async/await 从原理到实战
开发语言·javascript·ecmascript
qq_416018722 小时前
C++中的模板方法模式
开发语言·c++·算法
Rust语言中文社区3 小时前
【Rust日报】用 Rust 重写的 Turso 是一个更好的 SQLite 吗?
开发语言·数据库·后端·rust·sqlite
qq_401700413 小时前
Qt 数据库操作详解:从连接到增删改查
qt