项目实战:Qt监测操作系统物理网卡通断v1.1.0(支持windows、linux、国产麒麟系统)

若该文为原创文章,转载请注明出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136276999
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:项目实战(点击传送门)


需求

  使用Qt软件开发一个检测网卡的功能。
  兼容windows、linux,国产麒麟系统(同为linux)

Demo

  windows上运行:
  在这里插入图片描述
  

  国产麒麟操作上运行:
  在这里插入图片描述
  在这里插入图片描述

windows运行包下载地址

  CSDNf粉丝0积分下载:https://download.csdn.net/download/qq21497936/88874612
  QQ群:博客首页扫码进入QQ技术群,点击“文件”搜索“testNetworkCard”,群内与博文同步更新)


功能描述 v1.1.0

  • windows上实时检测出网卡通断(插拔,失联等情况)
  • linux上实时检测出网卡通断(插拔,失联等情况)
  • 国产银河麒麟操作系统上实时检测出网卡通断(插拔,失联等情况)

模块化部署

  在这里插入图片描述


关键源码

#ifndef LINUX
    QString cmd = QString("wmic /namespace:\\\\root\\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature");

    QProcess process;
    process.start(cmd);
    process.waitForFinished();

    QString result = process.readAllStandardOutput();
    LOG << result;

    result = result.replace("\r", "");
    LOG << result;
   
    QStringList list = result.split("\n", QString::SkipEmptyParts);
    LOG << list;

    bool ok = false;
    int t = 0;
    for(int index = 0; index < list.size(); index++)
    {
        QString str = list.at(index);
        str = str.trimmed();
        LOG << str;
        t = str.toInt(&ok);
        if(ok)
        {
            break;
        }
    }
    // false失败
    if(!ok)
    {
        emit signal_detectTemperature(false, _t);
        // 下一次检测
        QTimer::singleShot(_intervalMs, this, SLOT(slot_loop()));
        return;
    }

    // 转换
    _t = (t - 2732) * 1.0f / 10;

    // 抛出温度
    emit signal_detectTemperature(true, _t);
    
#else

    // sensors,有些电脑可能没安装,安装方法如下:
    // sudo apt-get install lm-sensors hddtemp
    // sudo sensors-detect
    // sensors

    QProcess process;
    process.start("sensors");
    process.waitForFinished();

    QString result = process.readAllStandardOutput();
    LOG << result;

    result = result.replace("\r","");
    LOG << result;

    bool ok = false;
    QStringList list = result.split("\n", QString::SkipEmptyParts);
    LOG << list;
#if 1
    for(int index = 0; index < list.size(); index++)
    {
        QString str = list.at(index);
        // 注意:
        //      1.虚拟机是无法获取温度的
        // Physical id 0: +39.0°C  (high = +80.0°C, crit = +100.0°C)
        // Core 0:        +33.0°C  (high = +80.0°C, crit = +100.0°C)
        // Core 1:        +35.0°C  (high = +80.0°C, crit = +100.0°C)
        // Core 2:        +36.0°C  (high = +80.0°C, crit = +100.0°C)
        // Core 3:        +39.0°C  (high = +80.0°C, crit = +100.0°C)
        if(str.contains("Core 0"))
        {
            LOG << str;
            QStringList subList = str.split(" ", QString::SkipEmptyParts);
            LOG << subList;
            if(subList.size() > 3)
            {
                QString s = subList.at(2);
                // ("Core", "0:", "+33.0°C", "(high", "=", "+80.0°C,", "crit", "=", "+100.0°C)")
                if(s.startsWith("+") && s.endsWith("°C"))
                {
                    _t = s.mid(1, s.size() - 1 - 2).toDouble(&ok);
                }
            }
            break;
        }
    }
#else
    QString str = "Core 0:        +33.2°C  (high = +80.0°C, crit = +100.0°C)";
    if(str.contains("Core 0"))
    {
        LOG << str;
        QStringList subList = str.split(" ", QString::SkipEmptyParts);
        LOG << subList;
        if(subList.size() > 3)
        {
            QString s = subList.at(2);
            // ("Core", "0:", "+33.0°C", "(high", "=", "+80.0°C,", "crit", "=", "+100.0°C)")
            if(s.startsWith("+") && s.endsWith("°C"))
            {
                _t = s.mid(1, s.size() - 1 - 2).toDouble(&ok);
            }
        }
    }
#endif
    // false失败
    if(!ok)
    {
        emit signal_detectTemperature(false, _t);
        // 下一次检测
        QTimer::singleShot(_intervalMs, this, SLOT(slot_loop()));
        return;
    }

    // 抛出温度
    emit signal_detectTemperature(true, _t);

#endif
#endif

入坑

入坑一:windows获取不到输出

问题

  在这里插入图片描述

原因

  win10获取系统设备相关信息,需要管理员权限。

解决

  发布时:1.点击exe右键,使用管理员运行。
  发布时/开发时:1.可以直接exe鼠标右键属性,勾选管理员权限运行,后面开发就可以了。
  开发时:2.开发的时候,可以直接使用管理员权限打开QtCreator即可。

入坑二:linux获取不到温度

问题

  没有传感器输出:
  在这里插入图片描述

原因

  因为是使用虚拟机上开发,实际是没有传感器等一些数据的,都是No。(注意:直接开发ubuntu驱动时,查看操作系统上设备树,所有寄存器地址都是0x0000000,也是一样的道理,与硬件相关的,虚拟机是模拟的,没有实际)

解决

  重新装了一台物理麒麟机,测试可以。
  在这里插入图片描述


本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136276999

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/408424.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

32单片机基础:对射式红外传感器计次

接线如下图&#xff1a; 在HardWare建立两个文件&#xff1a;如图 COuntSensor.c 如何配置外部中断,根据下面图&#xff0c;我们需要把外部中断从GPIO到NVIC这一路出现的外设模块都配置好。把这条信号打通就OK了。 1.配置RCC:把我们这里涉及的外设时钟都打开&#xff0c;不打…

[算法沉淀记录] 排序算法 —— 冒泡排序

排序算法 —— 冒泡排序 基本概念 冒泡排序是一种简单的排序算法。它重复地遍历要排序的列表&#xff0c;一次比较两个元素&#xff0c;并交换它们的位置&#xff0c;如果它们不是按照升序排列的。这步遍历是重复进行的&#xff0c;直到没有再需要交换&#xff0c;也就是说该…

【MATLAB】 LMD信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 LMD分解算法 LMD (Local Mean Decomposition) 分解算法是一种信号分解算法&#xff0c;它可以将一个信号分解成多个局部平滑的成分&#xff0c;并且可以将高频噪声和低频信号有效地分离出来。LMD 分解算…

消息中间件篇之RabbitMQ-消息不丢失

一、生产者确认机制 RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后&#xff0c;会返回一个结果给发送者&#xff0c;表示消息是否处理成功。 当消息没有到交换机就失败了&#xff0c;就会返回publish-confirm。当消息没有到达MQ时&…

打开 Camera app 出图,前几帧图像偏暗、偏色该怎样去避免?

1、问题背景 使用的安卓平台&#xff0c;客户的应用是要尽可能快的获取到1帧图像效果正常的图片。 但当打开 camera 启动出流后&#xff0c;前3-5帧图像是偏暗、偏色的&#xff0c;如下图所示&#xff0c;是抓取出流的前25帧图像&#xff0c; 前3帧颜色是偏蓝的&#xff0c;…

[嵌入式系统-33]:RT-Thread -18- 新手指南:三种不同的版本、三阶段学习路径

目录 前言&#xff1a;学习路径&#xff1a;入门学习-》进阶段学习》应用开发 一、RT-Thread版本 1.1 标准版 1.2 Nano 1.3 Smart版本 1.4 初学者制定学习路线 1.5 RT-Thread在线文档中心目录结构 1.6 学习和使用RT-Thread的三种场景 二、入门学习阶段&#xff1a;内…

架构设计:微服务架构实践

引言 前段时间做项目的时候有客户问到过我&#xff0c;什么微服务&#xff1f;微服务是一种架构风格&#xff0c;其中软件系统被构建为一组小型服务&#xff0c;每个服务都运行在自己的进程中并使用轻量级通信机制&#xff08;如HTTP或消息队列&#xff09;进行通信。这些服务…

Spring Boot与Netty:构建高性能的网络应用

点击下载《Spring Boot与Netty&#xff1a;构建高性能的网络应用》 1. 前言 本文将详细探讨如何在Spring Boot应用中集成Netty&#xff0c;以构建高性能的网络应用。我们将首先了解Netty的原理和优势&#xff0c;然后介绍如何在Spring Boot项目中集成Netty&#xff0c;包括详…

代码随想录算法训练营第三天

● 自己看到题目的第一想法 203.移除链表元素 方法一&#xff1a; 思路&#xff1a; 设置虚拟头节点 dummyhead 设置临时指针 cur 遍历 整个链表 循环&#xff1a; 如果 cur !nullptr &&cur->next !nullptr 则 遍历链表 否则结束遍历 如果 cur->next val 则…

C++ //练习 8.4 编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个独立的元素存于vector中。

C Primer&#xff08;第5版&#xff09; 练习 8.4 练习 8.4 编写函数&#xff0c;以读模式打开一个文件&#xff0c;将其内容读入到一个string的vector中&#xff0c;将每一行作为一个独立的元素存于vector中。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09…

装修避坑干货|阳台洗衣柜洗衣机一体柜设计。福州中宅装饰,福州装修

装修的时候常常会在洗衣柜中嵌入洗衣机&#xff0c;其实阳台柜的安装并不像看起来的那么简单&#xff0c;下面给大家说说几个注意事项‼️ 01.水电位置 在安装阳台柜之前&#xff0c;务必确认水电管道的位置。确保阳台柜不会阻碍水电管道的使用&#xff0c;以免造成不必要的麻…

U盘乱码与文件丢失:恢复指南与预防策略

U盘乱码文件丢失是一种常见的技术问题&#xff0c;通常表现为存储在U盘中的文件名显示为不可识别的字符或文件无法正常打开&#xff0c;有时甚至文件会完全消失。这种情况可能由多种原因引起&#xff0c;包括但不限于文件系统损坏、不正确的拔插操作、病毒感染、兼容性问题等。…

花生壳内网穿透教程(图文并茂)

目录 前言&#xff1a; 使用教程&#xff1a; 1.注册账号 2.软件下载及安装&#xff1a; 3.账号绑定及花生壳的使用 4.内网穿透的配置&#xff08;重点&#xff09; 4.2 新增映射页面&#xff1a; 4.3 上面几种映射的区别&#xff1a; 4.4 上面TCP类型的区别&#xff1a;…

Linux进程信号 ----- (信号保存)

前言 信号从产生到执行&#xff0c;并不会被立即处理&#xff0c;这就意味着需要一种 “方式” 记录信号是否产生&#xff0c;对于 31 个普通信号来说&#xff0c;一个 int 整型就足以表示所有普通信号的产生信息了&#xff1b;信号还有可能被 “阻塞”&#xff0c;对于这种多状…

鸿蒙中的九种布局概述

鸿蒙中的九种布局概述 概述 鸿蒙开发中包含就种布局&#xff0c;分别为线性布局、层叠布局、弹性布局、相对布局、栅格布局、媒体布局、列表、网格、轮播。 线性布局 线性布局通过Row和Column进行构建&#xff0c;是其他布局的基础。其中Row是水平方向排列&#xff0c;Colu…

电路设计(25)——4位数字频率计的multisim仿真及PCB设计

1.设计要求 使用4位数码管&#xff0c;显示输入信号的频率。完成功能仿真后&#xff0c;用AD软件&#xff0c;画出原理图以及PCB。 2.电路设计 输入信号的参数为&#xff1a; 可见&#xff0c;输入为168HZ&#xff0c;测量值为170HZ&#xff0c;误差在可接受的范围内。 3.PCB设…

Jenkins解决Host key verification failed (2)

Jenkins解决Host key verification failed 分析原因情况 一、用OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时&#xff0c;OpenSSH会核对公钥。如果公钥不同&#xff0c;OpenSSH会发出警告&#xff0c;避免…

【Java程序设计】【C00299】基于Springboot的仓库管理系统(有论文)

基于Springboot的仓库管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的仓库管理系统&#xff0c;本系统有管理员角色权限&#xff1b; 系统整体功能有&#xff1a;个人信息管理、仓库管理、物资管理、物资…

matplotlib子图绘制

文章目录 子图组合网格布局GridSpec matplotlib教程&#xff1a; 初步 子图 从绘图流程出发&#xff0c;【plt】图像有三个层级&#xff0c;依次是窗口、坐标系以及图像。在一个坐标系中可以有多条曲线&#xff0c;即表示多个图像&#xff1b;相应地在一个窗口中&#xff0c;…

文心一言 VS 讯飞星火 VS chatgpt (201)-- 算法导论15.2 6题

六、用go语言&#xff0c;证明&#xff1a;对 n 个元素的表达式进行完全括号化&#xff0c;恰好需要 n-1 对括号。 文心一言&#xff0c;代码正常运行&#xff1a; 在Go语言中&#xff0c;证明对n个元素的表达式进行完全括号化恰好需要n-1对括号&#xff0c;可以通过数学归纳…