Qt-获取计算机信息(MAC、IP、CPU、主机名等等)

这篇具有很好参考价值的文章主要介绍了Qt-获取计算机信息(MAC、IP、CPU、主机名等等)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

简介

       在我们开发软件时,会经常需要用到计算机的相关信息,基于这些信息,我们可以开发一些辅助模块。本文将分享几个可以应用在Qt中的常用函数,帮助大家更便捷地获取如下计算机信息。

  1. 主机名。
  2. CPU。
  3. MAC地址。
  4. IP地址。
  5. CPU核心数。
  6. CPU线程数(逻辑处理器)。
  7. 处理器ID。
  8. 主板序列号。
  9. BIOS序列号。
  10. 硬盘驱动器序列号。

主机名

// 获取计算机名称
QString Registration::GetMachineName()
{
    // 获取主机名
    QString machineName = QHostInfo::localHostName();

    return machineName;
}

CPU

// 获取CPU信息
QString Registration::GetCPU()
{
    // 获取CPU注册表地址
    QSettings cpu("HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", QSettings::NativeFormat);

    // 提取CPU信息
    QString m_cpu = cpu.value("ProcessorNameString").toString();
    return m_cpu;
}

 MAC地址

// 获取MAC地址
QString Registration::GetMac()
{
    // 获取所有网络接口列表
    QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();

    // 遍历接口
    int nCnt = nets.count();
    QString strMacAddr = "";
    for(int i = 0; i < nCnt; i++)
    {
        // 网络接口需被激活且正在运行且不是回环地址,才可能是要找的地址
        if(nets[i].flags().testFlag(QNetworkInterface::IsUp) &&
           nets[i].flags().testFlag(QNetworkInterface::IsRunning) &&
           !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack))
        {
            // 该mac的ip地址不能是回环地址并且是ipv4地址
            for(int j = 0; j < nets[i].addressEntries().size(); j++)
            {
                if(nets[i].addressEntries().at(j).ip() != QHostAddress::LocalHost &&
                   nets[i].addressEntries().at(j).ip().protocol() == QAbstractSocket::IPv4Protocol)
                {
                    strMacAddr = nets[i].hardwareAddress();
                }
            }
        }
    }

    return strMacAddr;
}

IP地址

// 获取IP地址
QString Registration::GetIP()
{
    // 获取所有网络接口列表
    QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();

    // 遍历接口
    int nCnt = nets.count();
    QString strIpAddr = "";
    for(int i = 0; i < nCnt; i++)
    {
        // // 网络接口需被激活且正在运行且不是回环地址,才可能是要找的地址
        if(nets[i].flags().testFlag(QNetworkInterface::IsUp) &&
           nets[i].flags().testFlag(QNetworkInterface::IsRunning) &&
           !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack))
        {
            // 该mac的ip地址不能是回环地址并且是ipv4地址
            for(int j = 0; j < nets[i].addressEntries().size(); j++)
            {
                if(nets[i].addressEntries().at(j).ip() != QHostAddress::LocalHost &&
                   nets[i].addressEntries().at(j).ip().protocol() == QAbstractSocket::IPv4Protocol)
                {
                    strIpAddr=nets[i].addressEntries().at(j).ip().toString();
                }
            }
        }
    }

    return strIpAddr;
}

获取wmic指令结果

// 获取WMIC指令结果
QString Registration::GetWMICInfo(QString cmd)
{
    // cmd指令
    QProcess Cmd;
    Cmd.start(cmd);
    Cmd.waitForFinished();

    // 获取输出结果
    QString result = QString::fromLocal8Bit(Cmd.readAllStandardOutput());

    // 拆分指令字符串
    QStringList list = cmd.split(" ");

    // 指令字符串的最后一个单词提取出来作匹配,匹配成功则在result中删除
    // 如:wmic cpu get processorid,那么list.last()就是processorid
    // Qt::CaseInsensitive表示无视大小写,Qt::CaseSensitive表示对大小写敏感
    result = result.remove(list.last(), Qt::CaseInsensitive);

    // 删除输出结果中的回车和换行
    result = result.replace("\r", "");
    result = result.replace("\n", "");

    // 去除空格操作
    result = result.simplified();

    return result;
}

CPU核心数

通过wmic指令获取。

// 获取CPU核心数
QString Registration::GetCPUNumberOfCores()
{
    QString cmd = QString("wmic cpu get NumberOfCores");
    return GetWMICInfo(cmd);
}

CPU线程数

通过wmic指令获取。

// 获取CPU线程数
QString Registration::GetCPUNumberOfLogicalProcessors()
{
    QString cmd = QString("wmic cpu get NumberOfLogicalProcessors");
    return GetWMICInfo(cmd);
}

处理器ID

通过wmic指令获取。

// 获取CPU处理器ID
QString Registration::GetCPUProcessorid()
{
    QString cmd = QString("wmic cpu get processorid");
    return GetWMICInfo(cmd);
}

主板序列号

通过wmic指令获取。

// 获取主板序列号
QString Registration::GetBaseboardSerialnumber()
{
    QString cmd = QString("wmic baseboard get serialnumber");
    return GetWMICInfo(cmd);
}

BIOS序列号

通过wmic指令获取。

// 获取BIOS序列号
QString Registration::GetBIOSSerialnumber()
{
    QString cmd = QString("wmic bios get serialnumber");
    return GetWMICInfo(cmd);
}

硬盘驱动器序列号

通过wmic指令获取。

// 获取硬盘驱动器序列号
QString Registration::GetDiskdriveSerialnumber()
{
    QString cmd = QString("wmic diskdrive get serialnumber");
    return GetWMICInfo(cmd);
}

效果图

qt获取maccpu,Qt,qt文章来源地址https://www.toymoban.com/news/detail-562261.html

到了这里,关于Qt-获取计算机信息(MAC、IP、CPU、主机名等等)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机硬件CPU】

    输入单元 、 输出单元 、CPU 内部的 控制单元 、 算数逻辑单元 与 内存 五大部分 CPU 其实内部已经含有一些微指令,我们所使用的软件都要经过 CPU 内部的微指令集来达成才行。 那这些指令集的设计主要又被分为两种设计理念,这就是目前世界上常见到的两种主要 CPU 架构,

    2024年02月10日
    浏览(35)
  • 【计算机架构】如何计算 CPU 动态功耗

           本篇博客全站热榜排名: 8 📜 本章目录: 0x00 动态功耗(Dynamic Power) 0x01 集成电路成本(Integrated Circuit Cost) 0x02 基准测试(SPEC CPU Benchmark) 0x03 SPEC功率基准测试(SPEC Power Benchmark) 0x04 Pitfall:Amdahl’s 定律 0x05 Pitfall:将 MIPS 作为性能指标 0x00 动态功耗(Dynamic P

    2023年04月21日
    浏览(57)
  • 【计算机组成原理实验】CPU设计

    设计并实现一个简单处理器模型完成功能验证。 ASUS VivoBook + Windows10 + Vivado2019.2,语言为 Verilog HDL。 1. 处理器应基于 6.5 指令集或 MIPS 指令集或 RISCV 指令集进行设计或自行设计指令集。 2. 处理器的控制器结构应为微程序控制器或集硬布线控制器。 3. 处理器需支持算术运算、

    2024年02月08日
    浏览(41)
  • 计算机中CPU、内存、缓存的关系

    CPU(Central Processing Unit,中央处理器) 内存(Random Access Memory,随机存取存储器) 缓存(Cache) CPU、内存和缓存之间有着密切的关系,它们共同构成了计算机系统的核心部分,CPU和内存都具有相应的速率和带宽。在配置电脑过程中,根据CPU的速率和带宽,来搭配相应速率和带

    2024年02月11日
    浏览(45)
  • 计算机组成原理——中央处理器cpu

    计算机组成原理-题库 中央处理器选择题 1 、中央处理器(CPU)是指什么。 A、 运算器 B、 控制器 C 、 运算器和控制器 D、 运算器、控制器和主存储器 2 、在CPU中跟踪指令后继地址的寄存器是什么。 A、 主存地址寄存器 B 、 程序计数器 C、 指令寄存器 D、 状态条件寄存器 3

    2024年02月10日
    浏览(41)
  • 计算机组成原理实验——五、单周期CPU设计

    掌握指令执行过程的5个阶段 掌握每条指令的数据通路选择 掌握译码器和控制器的功能和实现 掌握数据输入输出处理的方法 实现risc-v中RV32I指令的单周期CPU 利用实现的risc-v CPU实现平方数 实现risc-v中37条RV32I指令的单周期 cpu; 完成1后在该cpu上实现斐波那契数。 rom dataRAM ins文

    2024年02月11日
    浏览(39)
  • CPU的计算机能力和AVX512指令集

    1、Intel的独门绝技 AVX-512指令集包含非常多可以加速工作负载的指令,包括科学模拟、金融分析、人工智能、深度学习、3D建模、音视频处理器、加密解密、数据压缩等。 按照Intel的说法,如果软件支持AVX-512指令集,那么Intel的处理器会有极大的性能提升。 2、对于普通用户意

    2024年02月09日
    浏览(49)
  • 【计算机硬件系统设计(华科)——现代时序 CPU(Logisim 实现)】

    本章为《计算机硬件系统设计》的最后部分——现代时序CPU的设计与实现。 且本章未按照课程讲述设计(展示的设计内容实现指令 24 条)

    2024年02月09日
    浏览(41)
  • 计算机组成原理知识——CPU结构组成和功能、堆栈、RISC、

    2023.9.6 计组知识开始学习 中央处理单元 :简称为CPU或处理器,功能是控制计算机的操作和处理数据 控制器 :控制计算机的操作,例如读取指令、分析指令、时序、总线的控制等 运算器 :完成数据处理功能 寄存器 :临时存储指令、地址、数据、计算结果等 中断 3个:取指

    2024年02月09日
    浏览(37)
  • 【计算机硬件系统设计(华科)——单周期MIPS CPU(Logisim 实现)】

    本章继续讲述计算机硬件系统设计的内容,之前已经大概说明了 ALU 和存储系统的设计,本文讲述CPU的设计。对应的有单周期、多周期 CPU 设计,以及流水线设计,中断处理会在后文中详细说明,本文不进行讲述。 即定长指令周期,机器性能取决于最慢的指令,导致时钟周期

    2024年02月02日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包