C++ QT 实时进行网络监测

简介: C++ QT 实时进行网络监测

一、说明

向百度发送请求,判断是否连接网络,使用定时器,每五秒检测一次,由于会影响主界面,将其添加进子线程

二、代码

代码如下(示例):

//NetworkTester.h
#pragma once
#include <QtCore>
#include <QtNetwork>
class NetworkTester : public QObject
{
  Q_OBJECT
public:
  NetworkTester(QObject *parent = nullptr) : QObject(parent) { testNetworkStatus(); }
public slots:
  void testNetworkStatus()
  {
  QNetworkAccessManager *manager = new QNetworkAccessManager(this);
  QNetworkRequest request(QUrl("http://www.baidu.com/"));
  QNetworkReply *reply = manager->get(request);
  QObject::connect(reply, &QNetworkReply::finished, [this, reply, manager]() {
    bool status = false;
    if (reply->error() == QNetworkReply::NoError) {
    status = true;
    }
    emit networkStatusChanged(status);
    reply->deleteLater();
    manager->deleteLater();
  });
  }
signals:
  void networkStatusChanged(bool status);
};
//NetWorkCheck.h
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_NetWorkCheck.h"
#include "NetworkTester.h"
#include <QDebug>
#include <QTimer>
class NetWorkCheck : public QMainWindow
{
    Q_OBJECT
public:
    NetWorkCheck(QWidget *parent = nullptr);
    ~NetWorkCheck();
private:
    Ui::NetWorkCheckClass ui;
  NetworkTester *tester;
  QTimer *timer;
};
//NetWorkCheck.cpp
#include "NetWorkCheck.h"
NetWorkCheck::NetWorkCheck(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
  tester = new NetworkTester(this);
  QThread *thread = new QThread;
  tester->moveToThread(thread);
  thread->start();
  timer = new QTimer(this);
  QObject::connect(timer, &QTimer::timeout, tester, &NetworkTester::testNetworkStatus);
  QObject::connect(tester, &NetworkTester::networkStatusChanged, [](bool status) {
    if (status) {
    qDebug() << "Network is available.";
    }
    else {
    qDebug() << "Network is not available.";
    }
  });
  timer->start(5000);
}
NetWorkCheck::~NetWorkCheck()
{}
//main.cpp
#include "NetWorkCheck.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    NetWorkCheck w;
    w.show();
    return a.exec();
}

推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:

零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)

https://xxetb.xet.tech/s/VsFMs


相关文章
|
26天前
|
开发框架 Linux C语言
C、C++、boost、Qt在嵌入式系统开发中的使用
C、C++、boost、Qt在嵌入式系统开发中的使用
32 1
|
1月前
|
存储 网络协议 C语言
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
83 0
|
1月前
|
存储 传感器 安全
【串口通信】使用C++和Qt设计和实现串口协议解析器(二)
【串口通信】使用C++和Qt设计和实现串口协议解析器
56 0
|
1月前
|
存储 开发框架 算法
【串口通信】使用C++和Qt设计和实现串口协议解析器(一)
【串口通信】使用C++和Qt设计和实现串口协议解析器
110 0
|
1月前
|
安全 前端开发 C++
C++视角下的Qt按钮:从基础应用到高级定制(二)
C++视角下的Qt按钮:从基础应用到高级定制
45 2
|
1月前
|
XML JSON 算法
C++视角下的Qt按钮:从基础应用到高级定制(一)
C++视角下的Qt按钮:从基础应用到高级定制
90 2
|
1月前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
79 0
|
1月前
|
XML 安全 C++
DBus类型系统以及在Qt和C++ 中的使用(二)
DBus类型系统以及在Qt和C++ 中的使用
45 0
|
1月前
|
XML 存储 Unix
DBus类型系统以及在Qt和C++ 中的使用(一)
DBus类型系统以及在Qt和C++ 中的使用
45 0
|
1月前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
31 1

热门文章

最新文章

推荐镜像

更多