首页 > 知识百科 > 正文

项目实战:Qt网络监测cpu温度v1.1.0(支持windows、linux、国产麒麟系统) 原创

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

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

需求

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

演示

  windows上运行(需要管理员权限):
  

  国产麒麟操作上运行(需要管理员权限):
  

windows运行包下载地址

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

功能 v1.1.0

windows上定时检测cpu输出温度。linux上定时检测输出cpu温度。国产银河麒麟操作系统上输出cpu温度描述。

模块化部署

  


关键源码

#ifndef LINUX QString cmd = QString("wmic /namespace:\\\\root\\ wmi PATH MSAcpi_ThermalZoneTemperature 获取当前温度"); QProcess 进程;  进程开始(cmd);流程 waitForFinished(); QString 结果 < span class =“令牌操作符”r">= 处理readAllStandardOutput(); 日志 << 结果; 结果 = 结果替换("\r", < span class="310e-ceea-6e57-d487 token string">""); LOG << 结果; QStringList 列表= 结果分割("\n", QString::SkipEmptyParts); 日志 <<  list; bool ok = false; int t  = 0; 对于(int索引= 0 ;索引<列表大小() ;索引++) { QString str = list. 位于(索引); str = str.修剪(); 日志 << str; t = strtoInt( &ok); 如果(ok) { break; } < span class="0788-e6f5-0567-c4ab token punctuation">} // false失败 if(!ok) { 发出 signal_detectTemperature(false, _t); //下一次检测 QTimer::singleShot(_intervalMs,  这个, SLOT(slot_loop())); 返回; }//转换 _t = (t - 2732) * 1.0f / 10; //发送温度 发出 signal_detectTemperature(true, _t)< span class="88ef-1b68-c21f-def2 token punctuation">; #else  //传感器,有些电脑可能没安装,安装方法如下: // sudo apt-get install lm-sensors hddtemp // sudo Sensor-Detect / /传感器 QProcess进程;进程.启动("传感器"); 处理waitForFinished(); QString结果=过程readAllStandardOutput()< /span>; 日志 << 结果; 结果 = 结果.替换("\r",""); 日志 << 结果; bool ok = false;  QStringList列表=结果分割< span class="536c-88ef-1b68-c21f token punctuation">("\n", QString::SkipEmptyParts)< span class="bbf8-bd00-9a53-310e token punctuation">; 日志 << 列表;#if 1 对于(int 索引 = 0; 索引 < 列表大小(); index++) { QString str = list.at(index); //注意: // 1.虚拟机无法获取温度的 // 物理 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 ) // 核心 1:+35.0°C(最高 = +80.0°C,暴击 = +100.0°C) // 核心 2:+36.0°C(高 = +80.0°C,临界 =+100.0°C) // 核心 3:+39.0°C(最高 = +80.0°C,临界 = +100.0°C) 如果(str包含< /span>("核心 0")) { LOG << str ; QStringList subList = str.分割(" ", QString::SkipEmpty部分); LOG << subList; if(subList.< /span>大小() > 3) { QString s = subList.at< /span>(2); // ("Core", "0:", "+33.0°C", "(高", "=", "+80.0°C,", "临界", "=", "+100.0°C)") if(s.startsWith("+") && s.endsWith("°C"))< /span> { _t = smid(1, s大小() - 1 - 2< span class="1b68-c21f-def2-bbf8 token punctuation">)toDouble (&ok); } } break;  } }#else QString str  = "核心 0: +33.2°C (high = +80.0°C, Crit = +100.0°C)"; if(str.< span class="ceea-6e57-d487-2087 token function">包含("核心 0")) { LOG << str; QStringList subList = str .分割(" ", QString ::SkipEmptyParts); LOG << subList; if(subList大小() > 3) { QString s = subList.at(2); // ("核心", "0:", "+33.0°C", "(高", "=", "+80.0°C,", "临界", "=", "+100.0°C)") < span class="88ef-1b68-c21f-def2 token keywords">if(s.startsWith("+") && s.endsWith("°C")) { _t = s.mid (1, s大小() -  1 - 2)toDouble(&确定); } } }#endif // false失败 if(!ok) { 发出 signal_detectTemperature(false _t ); //下一次检测 QTimer< /span>::singleShot(_intervalMs , 这个, SLOT(slot_loop ())); 返回; } //推送温度 发出signal_detectTemperature(true _t);#endif#endif

入坑

入坑一:windows获取不到输出

问题

  

原因

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

解决

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

进入坑二:linux获取不到温度

问题

  没有传感器输出:
  

原因

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

解决

  重新装了一台物理麒麟机,测试可以。
  


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

项目实战:Qt网络监测cpu温度v1.1.0(支持windows、linux、国产麒麟系统) 原创由知识百科栏目发布,感谢您对的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“项目实战:Qt网络监测cpu温度v1.1.0(支持windows、linux、国产麒麟系统) 原创