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

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

时间:2024-02-25 12:44:42浏览次数:29  
标签:Core Qt windows 麒麟 v1.1 QString linux 卡通

需求

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

Demo

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

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

 

功能描述 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,也是一样的道理,与硬件相关的,虚拟机是模拟的,没有实际)

解决

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

标签:Core,Qt,windows,麒麟,v1.1,QString,linux,卡通
From: https://www.cnblogs.com/qq21497936/p/18032263

相关文章

  • Windows 10中还有其他类似的标识符和概念
    Windows10中还有其他类似的标识符和概念。以下是一些常见的:用户名(Username):每个用户在系统中都有一个唯一的用户名,用于登录和识别用户身份。用户ID(UserID):每个用户在系统中都有一个唯一的用户ID,用于在系统级别上标识用户。组(Group):组是一种将多个用户集合在一起的机制。每......
  • 关闭Windows网络连接状态指示器的活动测试 注册表 REG
    REG文件来关闭Windows网络连接状态指示器的活动测试:CopyCodeWindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet]"EnableActiveProbing"=dword:00000000该文件将向注册表添加一个名为"EnableActivePr......
  • 解决qtcreator在某次用sudo启动后,再次启动提示权限不足的问题
    现象:sudo./qtcreator启动qt,退出,再次启动打开项目提示"permissiondenied"这是因为第一次使用sudo权限启动QtCreator时,生成了一些配置文件或者临时文件,这些文件的所有者变成了root用户。因此,当你尝试以普通用户身份再次打开QtCreator时,会因为缺少对这些文件的访问......
  • 用wsl和windows vscode 进行开发
    https://code.visualstudio.com/docs/remote/wsl用wsl和windowsvscode进行开发上面是官方教程准备:安装wsl安装vscode插件:RemoteDevelopment使用(多种方式):在wslubuntu中输入code.在code中打开F1-WSL:xxxdistro...在windows用命令行启动code,附带下......
  • 用于linux和windows共享的samba服务
    ftp是客户端、服务端两个服务端是vsftpdlinux客户端是ftp命令,以及其他各种支持ftp协议的工具,如windows下提供很多软件,支持图形化上传下载ftp,xftpwindows访问ftp命令行操作C:\Users\yu>ftpftp>byeC:\Users\yu>C:\Users\yu>C:\Users\yu>ftp10.0.0.31连接到10.......
  • windows如何同时安装两个不同版本的Mysql(Mysql8.0+Mysql5.7)
    1.问题由于公司要求使用mysql版本为Mysql5.7,而我之前的项目均是使用Mysql8.0,为了避免卸载重新安装Mysql5.7可能导致的问题,便寻找了可以同时在Windows上安装两个不同版本Mysql的方法2.解决参考:windows如何同时安装两个不同版本的Mysql(Mysql8.0+Mysql5.7)2.1进入你下载解压后......
  • appium进行windows桌面应用自动化及启动windows驱动报错解决方案
    安装appium环境参考文档:https://www.cnblogs.com/simon1993/p/16273390.htmlappium安装驱动找到官方驱动安装秘钥http://appium.io/docs/en/latest/ecosystem/drivers/打开cmd执行安装windows驱动命令安装windows驱动windows开发的驱动:https://github.com/Microsoft/WinA......
  • Windows ® Installer. V 5.0.20348.1668 (msiexec命令 参数
    Windows®Installer.V5.0.20348.1668msiexec/Option<RequiredParameter>[OptionalParameter]安装选项 </package|/i><Product.msi> 安装或配置产品 /a<Product.msi> 管理安装-在网络上安装产品 /j<u|m><Product.msi>[/t<TransformList>......
  • 恢复VCPkg(2023-01-27)中Vtk[Qt]的默认依赖为Qt5
    通过查看vtk的更新的日志已于2023-01-27将默认依赖的Qt的版本由5更新到6gitlog--.\ports\vtkcommit27fb19bdcc1f6ddb1261cffb5372724ac1d63a93Author:LilyWang<[email protected]>Date:2023-08-23[manyports]FixURLSofdownlo......
  • Windows系统下Visual Studio 2019中C++静态、动态库的封装、使用以及遇到的问题
    本篇文章主要是因为本人需要用到静、动态库的封装和使用,下面的链接关于静、动态库的封装和使用描述的非常详细:http://t.csdnimg.cn/HyTD4在按照上述封装好静、动态库之后,在VisualStudio2019使用过程中出现了“test.obj:errorLNK2019:无法解析的外部符号_createInterface......