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


相关文章
|
1月前
|
NoSQL 网络协议 Linux
Redis的实现一:c、c++的网络通信编程技术,先实现server和client的通信
本文介绍了使用C/C++进行网络通信编程的基础知识,包括创建socket、设置套接字选项、绑定地址、监听连接以及循环接受和处理客户端请求的基本步骤。
47 6
|
4月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
181 1
Qt(C++)开发一款图片防盗用水印制作小工具
WK
|
9天前
|
开发框架 开发工具 C++
C++跨平台框架Qt
Qt是一个功能强大的C++跨平台应用程序开发框架,支持Windows、macOS、Linux、Android和iOS等操作系统。它提供了250多个C++类,涵盖GUI设计、数据库操作、网络编程等功能。Qt的核心特点是跨平台性、丰富的类库、信号与槽机制,以及良好的文档和社区支持。Qt Creator是其官方IDE,提供了一整套开发工具,方便创建、编译、调试和运行应用程序。Qt适用于桌面、嵌入式和移动应用开发。
WK
32 5
|
4月前
|
网络协议
Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例
Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议,在Qt也被Qt封装成了自己的库供我们调用,对于需要进行网络交互的项目中无疑是很重要的,希望这篇文章可以帮助到大家。 是关于Qt中TCP和UDP的基本使用和特点:
635 7
|
1月前
|
存储 监控 NoSQL
Redis的实现二: c、c++的网络通信编程技术,让服务器处理多个client
本文讨论了在C/C++中实现服务器处理多个客户端的技术,重点介绍了事件循环和非阻塞IO的概念,以及如何在Linux上使用epoll来高效地监控和管理多个文件描述符。
27 0
|
2月前
|
网络协议 Linux C++
超级好用的C++实用库之网络
超级好用的C++实用库之网络
45 0
|
3月前
|
存储 C++
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
|
3月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
151 2
Qt开发网络嗅探器02
Qt开发网络嗅探器02
|
3月前
|
存储 运维 监控
Qt开发网络嗅探器01
Qt开发网络嗅探器01

推荐镜像

更多