From 5e1abd63539cf8ce6f307e7a206d05caed4c1ab4 Mon Sep 17 00:00:00 2001 From: feiyangqingyun Date: Tue, 17 Oct 2023 14:11:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9ECPU=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=8E=A7=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 129 +++++----- control/0snap/cpumemorylabel.jpg | Bin 0 -> 27895 bytes control/control.pro | 3 +- control/cpumemorylabel/cpumemorylabel.cpp | 239 +++++++++++++++++++ control/cpumemorylabel/cpumemorylabel.h | 75 ++++++ control/cpumemorylabel/cpumemorylabel.pro | 17 ++ control/cpumemorylabel/frmcpumemorylabel.cpp | 42 ++++ control/cpumemorylabel/frmcpumemorylabel.h | 27 +++ control/cpumemorylabel/frmcpumemorylabel.ui | 73 ++++++ control/cpumemorylabel/main.cpp | 34 +++ 10 files changed, 575 insertions(+), 64 deletions(-) create mode 100644 control/0snap/cpumemorylabel.jpg create mode 100644 control/cpumemorylabel/cpumemorylabel.cpp create mode 100644 control/cpumemorylabel/cpumemorylabel.h create mode 100644 control/cpumemorylabel/cpumemorylabel.pro create mode 100644 control/cpumemorylabel/frmcpumemorylabel.cpp create mode 100644 control/cpumemorylabel/frmcpumemorylabel.h create mode 100644 control/cpumemorylabel/frmcpumemorylabel.ui create mode 100644 control/cpumemorylabel/main.cpp diff --git a/README.md b/README.md index d3a6b7a..2543032 100644 --- a/README.md +++ b/README.md @@ -25,70 +25,71 @@ ## 2 目录说明 **高质量项目加粗显示** -| 目录 | 相关 | 名称 | 描述 | +| 目录 | 相关 | 名称 | 描述 | | :-------: | :------: | :-----------------: | :-------------------------- | -| control | 控件相关 | battery | **电池电量** | -| control | 控件相关 | devicebutton | **设备按钮** | -| control | 控件相关 | devicesizetable | 磁盘容量 | -| control | 控件相关 | imageswitch | 图片开关 | -| control | 控件相关 | ipaddress | IP地址输入框 | -| control | 控件相关 | lightbutton | 高亮按钮 | -| control | 控件相关 | navbutton | **导航按钮** | -| control | 控件相关 | savelog | **日志重定向输出** | -| control | 控件相关 | saveruntime | **运行时间记录** | -| control | 控件相关 | smoothcurve | 平滑曲线 | -| control | 控件相关 | zhtopy | 汉字转拼音 | -| tool | 工具相关 | comtool | **串口调试助手** | -| tool | 工具相关 | nettool | **网络调试助手** | -| tool | 工具相关 | netserver | **网络中转服务器** | -| tool | 工具相关 | base64helper | **图片文字转base** | -| tool | 工具相关 | countcode | **代码行数统计工具** | -| tool | 工具相关 | emailtool | 邮件发送工具 | -| tool | 工具相关 | moneytool | 存款利息计算器 | -| tool | 工具相关 | pngtool | 图片警告去除工具 | -| tool | 工具相关 | keytool | **秘钥生成器** | -| tool | 工具相关 | keydemo | 秘钥测试程序 | -| tool | 工具相关 | livetool | 程序启动器 | -| tool | 工具相关 | livedemo | 程序启动示例 | -| video | 视频播放 | videobox | **视频监控布局** | -| video | 视频播放 | videopanel | **视频监控面板** | -| video | 视频播放 | videowindow | 视频监控控件 | -| video | 视频播放 | playffmpeg | 视频播放ffmpeg | -| video | 视频播放 | playvlc | 视频播放vlc | -| video | 视频播放 | plaympv | 视频播放mpv | -| widget | 窗体相关 | colorwidget | 颜色拾取器 | -| widget | 窗体相关 | framelesswidget | **通用无边框窗体** | -| widget | 窗体相关 | gifwidget | GIF录屏 | -| widget | 窗体相关 | lunarcalendarwidget | **农历控件** | -| widget | 窗体相关 | maskwidget | 通用遮罩层 | -| widget | 窗体相关 | movewidget | 通用控件移动 | -| widget | 窗体相关 | screenwidget | 屏幕截图 | -| ui | 界面美化 | flatui | 扁平化风格 | -| ui | 界面美化 | styledemo | **三套风格样式** | -| ui | 界面美化 | uidemo01 | 界面美化基础示例 | -| ui | 界面美化 | uidemo08 | **界面美化入门示例** | -| ui | 界面美化 | uidemo09 | 九宫格主界面 | -| ui | 界面美化 | uidemo10 | **扁平化主界面** | -| ui | 界面美化 | iconhelper | **超级图形字体** | -| other | 其他相关 | bgdemo | 异形窗体 | -| other | 其他相关 | dbpage | **通用数据库翻页** | -| other | 其他相关 | echartgauge | **echart图表js交互** | -| other | 其他相关 | lineeditnext | 文本框回车自动跳转 | -| other | 其他相关 | mouseline | 鼠标十字线 | -| other | 其他相关 | ntpclient | NTP校时 | -| other | 其他相关 | trayicon | 通用托盘效果 | -| other | 其他相关 | multobj2slot | 多对象共用槽 | -| other | 其他相关 | drawrect | 随机大量矩形 | -| third | 第三方类 | designer | QtDesigner设计师(Qt4) | -| third | 第三方类 | hotkey | 全局热键1 | -| third | 第三方类 | shortcut | 全局热键2 | -| third | 第三方类 | miniblink | **浏览器miniblink内核** | -| third | 第三方类 | qwtdemo | 无插件qwt示例 | -| third | 第三方类 | qcustomplotdemo | **精美图表qcustomplot示例** | -| netfriend | 网友提供 | astackwidget | 动态StackWidget | -| netfriend | 网友提供 | imagecropper | **头像设置工具** | -| netfriend | 网友提供 | imageviewwindow | 图片3D效果切换 | -| netfriend | 网友提供 | slidepuzzlewidget | 滑块图片验证码 | +| control | 控件相关 | battery | **电池电量** | +| control | 控件相关 | devicebutton | **设备按钮** | +| control | 控件相关 | devicesizetable | 磁盘容量 | +| control | 控件相关 | imageswitch | 图片开关 | +| control | 控件相关 | ipaddress | IP地址输入框 | +| control | 控件相关 | lightbutton | 高亮按钮 | +| control | 控件相关 | navbutton | **导航按钮** | +| control | 控件相关 | savelog | **日志重定向输出** | +| control | 控件相关 | saveruntime | **运行时间记录** | +| control | 控件相关 | smoothcurve | 平滑曲线 | +| control | 控件相关 | zhtopy | 汉字转拼音 | +| control | 控件相关 | cpumemorylabel | CPU内存控件 | +| tool | 工具相关 | comtool | **串口调试助手** | +| tool | 工具相关 | nettool | **网络调试助手** | +| tool | 工具相关 | netserver | **网络中转服务器** | +| tool | 工具相关 | base64helper | **图片文字转base** | +| tool | 工具相关 | countcode | **代码行数统计工具** | +| tool | 工具相关 | emailtool | 邮件发送工具 | +| tool | 工具相关 | moneytool | 存款利息计算器 | +| tool | 工具相关 | pngtool | 图片警告去除工具 | +| tool | 工具相关 | keytool | **秘钥生成器** | +| tool | 工具相关 | keydemo | 秘钥测试程序 | +| tool | 工具相关 | livetool | 程序启动器 | +| tool | 工具相关 | livedemo | 程序启动示例 | +| video | 视频播放 | videobox | **视频监控布局** | +| video | 视频播放 | videopanel | **视频监控面板** | +| video | 视频播放 | videowindow | 视频监控控件 | +| video | 视频播放 | playffmpeg | 视频播放ffmpeg | +| video | 视频播放 | playvlc | 视频播放vlc | +| video | 视频播放 | plaympv | 视频播放mpv | +| widget | 窗体相关 | colorwidget | 颜色拾取器 | +| widget | 窗体相关 | framelesswidget | **通用无边框窗体** | +| widget | 窗体相关 | gifwidget | GIF录屏 | +| widget | 窗体相关 | lunarcalendarwidget | **农历控件** | +| widget | 窗体相关 | maskwidget | 通用遮罩层 | +| widget | 窗体相关 | movewidget | 通用控件移动 | +| widget | 窗体相关 | screenwidget | 屏幕截图 | +| ui | 界面美化 | flatui | 扁平化风格 | +| ui | 界面美化 | styledemo | **三套风格样式** | +| ui | 界面美化 | uidemo01 | 界面美化基础示例 | +| ui | 界面美化 | uidemo08 | **界面美化入门示例** | +| ui | 界面美化 | uidemo09 | 九宫格主界面 | +| ui | 界面美化 | uidemo10 | **扁平化主界面** | +| ui | 界面美化 | iconhelper | **超级图形字体** | +| other | 其他相关 | bgdemo | 异形窗体 | +| other | 其他相关 | dbpage | **通用数据库翻页** | +| other | 其他相关 | echartgauge | **echart图表js交互** | +| other | 其他相关 | lineeditnext | 文本框回车自动跳转 | +| other | 其他相关 | mouseline | 鼠标十字线 | +| other | 其他相关 | ntpclient | NTP校时 | +| other | 其他相关 | trayicon | 通用托盘效果 | +| other | 其他相关 | multobj2slot | 多对象共用槽 | +| other | 其他相关 | drawrect | 随机大量矩形 | +| third | 第三方类 | designer | QtDesigner设计师(Qt4) | +| third | 第三方类 | hotkey | 全局热键1 | +| third | 第三方类 | shortcut | 全局热键2 | +| third | 第三方类 | miniblink | **浏览器miniblink内核** | +| third | 第三方类 | qwtdemo | 无插件qwt示例 | +| third | 第三方类 | qcustomplotdemo | **精美图表qcustomplot示例** | +| netfriend | 网友提供 | astackwidget | 动态StackWidget | +| netfriend | 网友提供 | imagecropper | **头像设置工具** | +| netfriend | 网友提供 | imageviewwindow | 图片3D效果切换 | +| netfriend | 网友提供 | slidepuzzlewidget | 滑块图片验证码 | ## 3 效果图 ### 3.1 控件相关-control @@ -114,6 +115,8 @@ ![](control/0snap/smoothcurve.jpg) - 汉字转拼音-zhtopy ![](control/0snap/zhtopy.jpg) +- CPU内存控件-cpumemorylabel +![](control/0snap/cpumemorylabel.jpg) ### 3.2 工具相关-tool - 串口调试助手-comtool diff --git a/control/0snap/cpumemorylabel.jpg b/control/0snap/cpumemorylabel.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3881ccd4e5adca27b21babd614cdfe8a368c0bca GIT binary patch literal 27895 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

^2l+9ml%7m689P_}qum=X<=fJE9I;%cAq zQ1>lFFrV3WnO%&ju(ZXfSC3sX)9N$MM#lE#J^3Kx zv5=8iwtLue+_=fX_^$$tgE0HVhBh?PwYMtw!XocordA$3rTnR6l9kopCyS%4@)bs z++&SJ8HeyLrE16-{wQCk^g6Ncm+5_Cw|(_l1d8x?n(&`JuKIH1fjl3dKFg<^5iX{} zR`21AGyY$ABBzWQVpG6)1vL4$l@mU5ESp)`MSB4}>jZusttLMAymWew9tK zPp^3m2<{R)|1dL=vA`K~6@CqT9VJ=GI+`I z>fM#y#hv2F= z3#Iv<1*uLajL~?M+T+j>({v5WUCR30;eC%Iex7kT{9FjNu#q<83@1QNlkTpFg`sko z8YOCYf^A8HL)fBNoT}x+)@f^L#$;fd6Yr5UZVH(NDO=ilX}}0@>p~rhfLV)6$=N?$ zO!LTWWm33&D3;wzD%lxaSdsOL7#hn1P^~Pi$;4dD7v=-YdICX^#BTKsYVQ3Wg{p*d zDHjGIe_ACQRR6^Hy!$bl*_b)jf+Srps33@LD($;4v4rfG`-*kz4CJmX<%$(sLFKR^R`IK5C zID+e@SDATMSW&Gre0yP^=lJlks^g#zDwd^Ozmn}0;T-6^}ONO$6M=aRDT^J z=ku=sV@+=hI_yW&CFDj$lHC&yPa@8=x|z=8oaOpF|48C51KgzWM(fL*T=N|kN!&iK zwPH=49qnAJ<&4TeB+c#E9O+Twyv;a0eXrn3RcoYA=W(`VOY@-U-e=Oc2+_0U$8GvH zOThWm(zK`Ab0}NnpNk&`?2EK(_Y*;VSZ;#(r7XS4`3UAPO~!hx-A;CYf!-AN-ZUc! z%MmidBgE31e`0TS5@p20BZSJ+&u~Y)UC0aQOg8M*manrof681D>GIl-zQhrZ%`c9` zV4tEzNgj!MM>;4L@s7NtH^mu?g#738zQclOjl;;5s27KqpQ{57dI%FpDCxTTot zK8Y5ywnTI12PGWJ@`D!pq3C(yuP{NhfLsurAWyUvhr647F}s_3D6tfIkL&)q@NEl9 zZT+*gHq7|X{D{VB*;0w`2gDe)?vqpNmaQb}&{4FkGjuwywFNm{1I#?tgH#xg0K{S} zyfjF)aqA#NZ9O!d2WP9P#|&JnE^%{v>iSB_`ZLSZSH-l{4clIM)DkZC6=AS%olkw} zM-9e1?ak+M;u0$1g;axK-*x#%)$Xf035hZ9&KxNCS59kZ%MEScT1h!D$nYr3^pQb~ zYNYA5GhmaVYZ^2Pi?-@j4_a^|%1+ZKCb%Pvs$#OidO6a>k|vLT#_?c zGa*6|X6ewobd4G9Ld8z@uVr;ZRJ@3~M*7n*iv$M*oHlF2>~2Y#`a7xm%xMBpSLsX@ zszZ~z-^-7}uP})V^2+q{3%`vuHR0|G)WS?ydzOSTo=2s$tIQK^1VF$Z$GA1LcSjF_ zD43a78&0q5GoN$LH0*=9VVVHt5~3A8_D8MI=lstVN^{eth~A6O)7T{8`%a&p(__4; z6j60wYpj2jhqV;XoZVGXV%^8K)-Y^5DztI6{^mu3Kz{vaR2L$B9>Hufl3nHH?ZXF~ zd6N9z=`wf|M@d>@0|Dg416ubXR zcPZJ|_eg)W*x#$@ZNrZu$^R&H3aV29V)%LSy=DrQZwS!V`VL9MEA@5KUYlI3Y7GZ}3nvPez{R9YGk4 zSvCV50*h|mX67jHq!?#QRqU6Cf~)41s>0Hstranj*1Ej<%W3J)%dZl} z@L@K6Re+XUjx9g=6Lv&ith1`UUfar`$=l6bebPN9p)%WiE7)rLsBPi-Xn+1{O>St= zDnx*lanA5aQ=6P~E%AU^w3{)^&e1~scDUn(E;e;(d_H<*vBCXSA;qZjCZSSL4qNw# z7a1hUN;~zaoGflIPbD)Ix~fVS1Teqlp8eh&rNSnA`NU7t#&U*>@H}%se!TF{mRLuT zot-bpe55Z?-|F~6+wv)kaVHB>t=7X<&}l1C9JQ? zn@!mA!B|E)4glZR-cV=tN+sW^XX<)x+!l5AR1r5)vy~^ns^;qMarRY3HtU>zYavrO zu!8yZTp5eqI&pLOhlTm%vD0{k&$-$t?Y6~2mh)*SD5!F%X*6f zZDK=CGXdTU4jYlP%9%TNoeOFMwJlYB;Ez{5GR3v=WK{i0dxQ;)>4TgsR9>>_@xA#%R3y;+nXpPSywXzIJba1v>iNj@#3-f_Zn`w7 zWc-{~T=JM=xE2p|kO-)5Ou0u~>&g`UmX77hHrqSV@rC}W)(4^P&+1-l-k*Psf}Vbr zDsiP)&*F`vNzs=$VQ%Qih^l-}%bjlX&=G0T`#CYQYUwftEq8RW%yusC05&g8K>u>? zR1{o2zI?2jXP*2}v(<GMQT5`V#65nUDR%_Lsd>W}O0 z&m~g|k5v?1-Mvt9Eu4y!dlW_}J2#u_z11ZMuIF1x zX1ARM_M@hd-QO2$)qTm>N-+y602{Ocjy&q3m!v}fm^=x7Q& ze)L!oM~2~7oMAlIfKNY0iXNlYqJKF6{ZrgsqAI09z%y2i{gPX~!_f@s9 zPlihfx=m+@HcV!Keozu3fIfm(;pa#mu8Gu)Li=^4|rgjDkNn}np3TXwJ5JTgX z;6ZW9ANJH=@}-)6CK8DLauAm=HPkQNi_Vwt9Ns;aYkNU2ovVV#7MU~0kIolOHgjji zz)Wb|OhPSJKDtQ56=JTjDj(v(s?45Yr7Fjh&*N{nVEALGbq(NLKi|0{kA$SGCLE-{ z@_9$53g-lc8hkqw%*Y!f6M`Inu&SD(K&NQ5tnS$mjCf@iQW@Gj$*X(C~{GTLkYEE>Mok|le1u#n96<0Fkwcx{%v-aMXz z*~uZsPLbKZshrsyte7J=HS-$2f-z^Mv{UmlrYIMQ@rLHjYk&-umzt{&otODtt2wtF_U$RDN;zPXr*b+IMtB4CH-m^3p$En%S6+IzT%-lseR$*pxrXCT;#xH!= zEVWYxn+D2kUh!mn9y<5wXAu9a4eJH^G5W>MZj6ZGD)YM&pYNm9aJt(E1OI4Psz%xV zV|Hq)w3ph;09$XW`!>atzA}MLxV{fxGy1iHcdx$BRqWx1li{uw zzF8>T(=f-KwI6&iz-WU9#f)Xl_-+bn_0*mGwpRl9*5xl%0`=_v0-0}eXCDSah@NL0 zKL1(t&;TR&{+Y zrVEOQQ0ohPa#R|*1fRuX8(NAp2wnmzo7Xyt-%_P-)`t@&67sixj2!ar(#zd8;a=;& zVde0HbzDSxRDjzzMjS%=c5^{qc!0W~U8a@W6)J#9>k9QIy3l8-gRt~6tz_{a2ra54 z4A1(4!rU`3u&JH2f+JH%A4Wfc8rj7QrmaA zaRb2!^lc#^-*z)(2i%|#Q)mk!K**w&p=HT5aFJXjb9vwnSsltey6MxkLgO#4i;o^_ z#O68NG9k->ii|QD!3UssLj#7#K11T&85{jTDBi5MHQMGrNV>~l18K2wx1YIVYPZ?| z@=;s2)l|%hvIIFR=^5 zh141X-)MJ)OQUv{CkI&!pp+1xU2+D zBm_zfm}L;-9@x-D3xK;FXs{7WvFFfDO02ujie!RYZz15;ieP(zuw%Cmg^X2k^V4d) z;;=H2n!~sxGF+4rM4kj#%HFLChii!0$>$_X(mqEJ%Fral#q$7`u)}fd zNQH}s0k!cu6@vKvYAq<4*CdT|Hh8cJYO6uYQ5Ll3$nCm9Zn2r_C`Isn)uPmdetZIe zNC~(()qFgWNEXcQApm?;FcmP>yZE3*_Ornp{l+epTQ^-{yIL%NmjiE_RWCCYr;tU# z2VGe~BmcWKM&)G}DvTjuI@qDfbZpN1T$|*%k1+>xhx?xd1x+C^Hu6Zmt3ukm4MsF> z5*%``G$tjalCEQm>!1;)QXr3!E^>ijVvbz{G=e}THKwW`+$T^NtUQMRL{lPXGzzOH z==Y2&9Fo~pdE~kKvX)h}n0*s790;w*(Z$=TeB&-8u&7+%F)|;!=+lj9n#WI-kHUcu zU%^x1JOu%HOrUONHrPnSrB~W}#f84mL#EPhC$+?DKv*L(JU_yagSbncor~2u))CUI z_-KpK(gKuUltCP>e}8=MBE+ef?5Xqp7q%w!4srKD*MKq=rNq%?fyEXFgNRWt-NQl{$DSIAr@06q@zaN%u~YYi22#4*XAemN zn(gGdgozR95uxuFeU`?h-yuzCO2319e~H5z zOjR5y`dqye3yupNaIsQHJ$?;{apo}ZZ%E)-(eF$8PxV&bk4M5N9rpRB4)FclnDNcE zjXk1rBQ06^%yA7ULg!71af0`ZZWn6sO3);-yv6BWcH=O_hGKn@LSNa=gF|0gW+Si= zyn#M%U&O0T+FgfS1re27?ephW)Sw+Z5>0 zBEAUesRj$8rgPC@hWPU18h?TMp<^KPbxs$UX^IpQy)rD(cH?lDXt}^CdsZ-edPj%hM@#hb^A$!JFJSu%H>RoPau%()XI0pyi~{l1ulRz z7cw%{`nfW1%3CYAN#N`_bO}6~6RluuLGzsY&9II?uo_>gZ_(G*19Kspp=MW~duccl z;ck#5h0bLX$U+3q)Pf4UV<#+3DvyR2M6%{fOMp6xjw2V3?f}LHZhw-!;|6h~C-CnZ zta+rc=t!%bU`9A)Y3JP?;J7XMAT20r`IT?rXS~V$S@;Jo{JJ83@7-RA5Dv$$grJwe zZ_wYRYuX!H%ra`JV?II;Kp>(gOTBx~Sg0J&y)3&6r)c+07G8A92L?ki@Xn__zX1P7 z@Gbh)31VPkCoYt)T0+7ZOsQ=U?~eV0&+c_`x=l1+mr49Gu`?67$pcPZ&Q-%j8tWy9 z6QN$dvkBw78bKIYU!7cb6Fgap?BF3lN6F zq0gyZL|cFTUU2YGEkAHNKojuR&Fx5{C;Ef%W}I3R$55?Y(gi^@5u_mwYS%K4}CY*{ZQRzD*?iDdXQ`%Kt8?5W8!&6Wr$Hodh97Mv&GX)C`*1K4Or zN}38H90@*gA_HeOCAPc$UFGBkD41CN0{uZu@hltqBm8bI62KlPzIjd`a0xr@F!};1 z5y&Y?&qVcEcnR7o-tK|j(XdN90f57V%aRrz#T5@!^>Y+X3tk!z@q-*uYbpu*w*iZ} zWAD_U^mv#(e+Z%jp-??629`VBs$>(fOUzIQKR#=*+}I66YQbDu6H|YnFA|`U=Kqp; zpKV7%+7mEA3Ey+z`$ZgKjknvTC$<4<1|IRKdGsOwg&b1W^w|?CtEI(y3eq{Upk2aU z1aW|V2O+1#e%gR(dWeK=Me(g34V%a-To=U8UpF(r3Grh6p|K8ZhSHBeM93g793@)b zdOD1Wj1Nddlbo<4W+L&$mM<>PC^EyylR{VNh6D3-KlC3)NSQk+{P1gp% z=jV`sTl^U==6HBDBFM5Qeh*hckj)v+!o|wTF%PM-yA{;HluU~y-g@X)&7~krD=_j) zP0)BpeeZKdy+C;2A(5-}4)S}g#t+t{qJcy-+zcu8$SAu2B=iQQmk1kdYXlrDAz^f} zt}3scWDS`tc0)UQV#(olx1TF4=Sza?v5FUO;{{;qleu`mMeu7cM08tqIf5gK#t4ya za9IG#J!6z2IC3hQ0wfln5J6GJ7`V1*6gZS(n+Lq`-Z30ESY_+j`3riohatA0K84w+ zZ{7Qk7cIsPzWZMs!D1Cm{B^VH=LqR_5u{z{Uwa)x zms@o3A3FGpSRqp)G{+ziqksTzQ?#}6pmYe6Uv4G}olOvF3>0EaW2#Ak6ksFE#eg%Q za<@F(0X|uSF*=Tz(o8=UF8D!bbmkL#mDdE*k(>UaBZRNPB?Lq>*xdlEdh#@RzC4Xg zEbaAfbWby6Xo1kq&Ng0o&b?s8*vxPyeZQIB}$vYyT6F?Xf01mp`edqtpgctls!@DDKcwv zh{D&k5EUvbuB2 zqOMd+5xGq@t^vbon}cw+=l$FwIZoq4nnZx%D1*L*#^`qJ2CrjHB9mL})+Xfg#&VAg zX~&DX-aV>0htbFzovXRWgRl~f>haU_VuD1T-n?9-YM5c;a_g83tru+@-zab)$H5zHc2loB#+wY8ETcrU2@HC%b z7CJJt9gN+<{ZbNqFeG}=hrT}~>eNo=JVXWq_xgxFwZPG)=(H+6!p4Fh@g=VabV(R= z$)ps$VgBP8gx_W0YDfRyK77K^KMk<{0U(z74+wukV?qA}{sRE+<3Aw$8GZI=@E<^8 zf8c=c(Mf&MmkKZv5ae{iY4V_Jlg zfhFN9P>HyM>2`b3qkq!iT7LR)gSd|=4=rux7#fTR^G)$LWmlm;Y5$~P|NpBJ?w_hk zz&}@F{~1;JvxI-^{>y>^X=-kLB3PS!%BN#Z5+NjJ)$&LDH+J!_F9-lYb%O)nyuM#8 zKRv&7MSn~EgNXKr@BiNO?cZ1MRR6n(V2d^!*sv2OuoFj!K-jv?H~w#nHn1g|kzGgM z7}%Q49++y0OWgqqG5UUP=H}cHSg#*@?6CeIl0T9^NRK*={;Droc~0r=n67)qCc%hI z>#YVIk)=^##;7JI_XXtI;|`-?uZfK+A3uzGI_733<^w!9plp8Q9jddF@b0Y4v6U5> z&D1mMVc+_5(>rR&7NVRpi-HW6oas34lRT+XFL{m)HuQ~2co#krj~(}wkTY6)a(`O8 z7|$%7qw(*=yT$pyb>W5i3sDPNyK{cTAl|35Ui19h+T#1MyDf429YRo2`hoHGJH49Q z@RjUE{Q6TVIL{ioCl{BO7^E6YVG%;~HoybJ!fuO82xIqZdMaFrP*z)qDAbzijYJ%;lS6oM8FuT1SN9Izt3^0Ylr z7e?bB9&AqV++afN5O{h2yiDmN_@0s>{n+XJgDCM&Z{=yiRL@U+--Fv%wid`;)S2UA z+Frk*DP}n<^XUibbR$JmnxB>{lidzGcx$C2L=ot94ftpas%|=QUuVf_Aw95vM-(ye zK}^7F;{fbHd~z0Q5d5eqN07wr<9su@Bawy`q1{TuQ@6mL?q?vCDj; znuy~%@5aY1Upy9Q#n3!L2wvag`EXSBh|6T8wGZiFMHc9ABJA+yVQ{^_i2UGZz1cH8A?Z-}48)>R1X z3qS}2X`}qmpP1GDQqXfiw)rT`H%h!7zHzxRS|lVJk&_OB18O}eLE+HDE>$=X9@U(E zUvmxUYvmntSd=J+;*P_qgkygdVfw`Q#h0oAg=ifjIUIxBtI!*8R_clqRO&2A8HyrhzeY$Hvh^&p}n09(<>((vOHFd@@J44$r?R}#^H6(2w5WvUT? zoho$;K;&ySU7@(WsCjD6!oSMx3m}%(S`y$W{DLbOGhCJe73 zBLtA!+P`$6$$nz_ZS5QO3m^~(W<5T^<6W?$Zx$qms-hKUMMswYSo;P$ zQcY#rq&(Q=6NC6ev4Mih3UNYr^yTPAoS)z6@a9I1?#fSyDBHnp7nZv?b3y^*26WUA zZ0TL@Ch^)7e_Y7s+(1Rf4d@*9D|R4q4!~=BrSbGxv=NBh=b~x>j`>W8O>d8x=s5T> z;nug<6*V~a%NEd(IVL^?_BmET&V*ok+k^%kJ_TWlUIXkwAGv_kSYJ~(h6Iy2oQmrs ztsu}8T$+vqRy&{JobwDhMS><&S%FuL99XrL21om)cyRbyNmtF0!4lFIpVnMj%E7Nn zye^wqqXM4|FGB)6lkZZ-gy~#lU2VZd=9IE_n8KpEfpAsVE5sU??;uVkkVE7Ob zxOYUwg)xE3H(?{8#e(HEGh2E~G-$osXXG5X4(Q>SM6hi;R8%wfQRza9m-Q=ptHNMG z$xUgdylbBE-}^!?{Gg%pKKkAI><)5HJfD7jQmC1+!z18CU>7y&a7!qDcidUaG>4Sd zp>X-V7}HsK_)APbX}lfA`gq;8&yjahIrLL79o8VO zZ~O95mY_oLov|Rw+!_EN2)9mL_wIqVQ>*qARoX5r75t6a$SQpj2qTFLOS@O zJQP^hAa1A<`E@ZwdHBe(6Lj?sNUJD1a5T39rWV8Exb?Yk&Xc?r5jr)1%ddtn89ko0 z2QRp*RbA=Ra)$MZD!hdqPNn-q%VC5nAw3Z#ej#RAEfSKo$s4+b`O(M=Yk&Bu2FuZK zCbM}70?J-UAU{+f4De8$yEQK@c1<&tTh0B8WKgp&F_hzom@Djo)=tn$4Q{CT0q7pl zN7M%d6f5qLk4-4un*#PDKbuEOjN-8nrI^+KIu%zh;c) z0qWYk5KT+;u#}yQT^St3d|r)~Jb5>S^%G*nV`h2QSMkJI*nIto+kJe!hxO_Yjm!tE zvLEz?5y)4S%#$=wGjrkk0wq`_{7t?f`$gQ*?x8c6r%6xwpw4m+aKFluB|0PoE70j6 zGWP(n^|+oJoCMAws%@nD8j(0S72=&jiM~T*oFm2XXbt!&SjQ+Hxl-v!~mv=tZ9>rk3B@dJYWhP%kPo znM@OAPwNOi zYsoNmPIxd_I@|q{z*<2+}`p*T;pxBk^z?y{IV^kKTQzE3esQkCZRLOap)qMr!6_=8)24+4}fk--SQ} zJ$cvvkV&m!d~{P0{QOo?tB^OHo5mC_P(0_cM|3|$5|v+pgaPVcK8jlaY1%8HdzUQv z<=~lyzPeyT7N@m&bizWeS1z_TZ&PWbZ^20`lFr{NR)rSfS zT^ht$+@zKSk8s--qFXIy+u&|J_Zcm=1!BC6(3HiYDG0LFLF2!R@7}|)O7y%3z4s;P z&MG^WN$nWM-Bm*D&-!;|Fd=Q}U7}A|^l~51^AF-6*i*G&lS{icSD?O9Kp$qv$2$lD zAXWpgs1Q|)Cj%-}UNhFXE=K|j!7dO`>Z`>*tnoNDhAte{n35;{!S}*LpiEhKO`E8i z{Y*yeicget@0K?eO)5=|YA_{7N7M}1JARSRE~rHZ08u4D+a&XPI6NkX-0H|++_zU` zF%~6I7JMjWcsAQybT|T2!RkesI&%qmBoW^FlaI(CI=LopMk;Io2EfM0*C?)HB)G-$ zzrk%nAm{*g(> zDh~k8uj5U z0mgF;c>V~}?Tg2#v6~;cTr!SPh$J};Ta%7sj7aExzrM~iZv^@z&!k5Q5vwr_N7>cO z!NazN*;7Izan6jvh$o`lusvH>%-KrS{Gr|umUO^SRgumS0#~3=UX}UoeBGf@%MRWW zC+#ZWe*3!^jE_~)*tXkAo<)kTxeOHkQY~&pB_xYXwPIcN68kSZm6u)-T!z`R+1Sz# zgcx@f2dFWWTj#H&H1o(fB^qqH$88D~br`(0n+{ER*{POu7Y`D}y=}DdWEQNrvu#l) z^1`Lk`Q2Dh_5CB}CQ&0=@{iK}SsVS2JlO%SCu?P`xg^7QT&>uq>Uva%5OkW2hbD<-^9RYwdnCNNv686Tit2AezY z_Wl|CW9g)h8RVJOi`8&Rh=4h07ZsiZaxn(NtOX^?hXl9b6x|txPHH-^?Z@H}t+`j?I`8@oWnQ?wIq(f2GmH1YHH;IPq<8}lo|qqc zv}-dgYy@0X5JFApB|w5f5D=A!(nOR%=qM!=DZ)`s zk)R+&ia`jFqc@RqA_$5gARR&tgpMLrkR~M%6b__CBtk$Q=R4o~@IJhGZ*FI2c4v3L z{AXu=yR$pH>Jo_-anyz-rV>4@B=Zg%$C{#jFHtA<;e#6W^>L@o4vbeqv$FzTsV2@b zAY&@Yka#=k>u{zJ)<8+6gwcS;>mn&44=25rL|y@Pzb z-Hp5xtp0GSh5v@@IRP^g;#9o3g)+GRL}kFr@nY*!kgmmpV)#+;C^Pf6q@d70AQ6EH z?k z1dzsj9ThD>`IYFw3{Lg4VnoWvzQ@*Er^=x9qdD^Ll#6OlvGXo%#ws~KivAoUy6AUM z@w;4lb!GCVBuOEU|0Fva!!+9N8#^}2ZD?zF;F73lz6)g$jtbF>LocQicpbdY-yX=dqHeX;V>4da57KMypD!g&s{D zq65Wu5_d!v%n@W6Ks~}NWNx&@2dXV8HTFG!Nm5W=7xyP|7ruh%WXzX`j8M$(>jQF; z#tt@k;>S=;ua#deNWhN6aILynY1>WAKZ`|WdV6SV_J8X z6K8t~KaE&{VWV6^&f@*KBm^@h?tT<20*V+6x-DPLs~qZG(WO3c!<%U{(LQZ#=Oazj zsi#^en{Q;M>T1}rj24~iKq-Z9xNx@xPzAq|zWGF)c<&syQx*aV+ZF8sPwz-xGqr2G zB1uH0>Q}19tt88&DP@m~#M}GdOsc+GK&}=jY+Xc{M`kz3kQC73nxAZS_^_O8m3)7h zzfBb6<6>L^r3dhFlHHrAf%k&ZbVy`N7jg1m- z&9YX72E@b0>9^ZJ{!T$Hj;VsJn71r$Wb(VQ?`DJXhC4ZN88|TloDgQ#>;`?zMrqN~Sovo}8wqxNjt zl2@%?OiZJGhr8&7?CAv0ppr{L=D_MCdWAS;C@LWA^Y6Vtk4}RX>YFU1dgaAz`V?aU zAYbu%JN(4+)8BLAIX-8}D|P}bt%k{RS&^}@B$#P`zo*X3Bh!JLtOHF(x8E>Hmcg~_ z^j@~3F9gtTbH?wJu+~|WgB!EYKAap8)QSggCM|g_v2Z48dxjG}BSkM%j~}g=8nh*Y zM%MmY4vcF;sJkB?%XQph#|8Xm7YTD5^xGF?AS-zEfc;`HxnkgR&C%epZH473i9CFNQ(+%Pe-RG7zcjpYA_3hul zIg8OoSjs!Y=!v^`Eu{opqY7OG{S&ZXRGXr@geLtff1Q=Bwr27{Wo*PX=L47lVi1@7 z;gB|%)}|UET1=|4CrIhNqg7k{Vx!~xaVT+w{$a|OWKm~UNQ<(D%0+k1D{8x77HG%- zpjl#J5L-_0uaRS0JJ;{EKEoXUcJyd2)WpyAsWqv57~&ems+vNPF~^riu>$m{`|^!l z!oxyJTLTUNQ~Rr|7o3zEn3bTbTp)~CV1bm6eCah|=KV7}EK-^!bCvmjAK zZeY4A*t!;Mu@PN`xB~%g=>J$m|0Rf)=?V`D(q^njk9qRE(8NeYQczsbOl}^Np4C<>g*Ct_bc#HN)h`4YWepy?EsTD_ zQNd*G5&WeDC0vLnMP76#wYUgr!zHdT)8plN(ic9_q@4&_VUtusmn(!&iN1~(4@l&g z>v7V$|Dj|1_FCJp9ijFPgX&IV7f98GH!0(pNMUDA;CLDHg#yyB!~^b~b$weE9;^rj zxVexVi%7Er@h6CaRg^o;P@5^PF-qD7Dr!Yk{*M^n*ZbSJ0;biAh((VB*O>aY>8vn4 z3%yFu^zEz3W3^I)vR`&zpQCiN{nD@9V;}%gA{w*y2})|c?2X=NDvf+)c1A_rR+HF2 zyS@N;aotZ9QY1>K&=0=WEo04o>UERAwbBLiKEZ%V7Rr=I*``gVa=|cd} zTa9>z>ZrV(Dr0^04QY|>O6n()i{j)#fA+|hAH%t&N7`scK;L+Tge9Wz){;qV5)*Um z%|dBA=gh&BQZu8MT3p?gsgFX!1r2u(0rf@e-R1QJLAq*5%pt%Ahby7qp||Napi?Ce zDDHR=0#`3*Nwq_m-X9r&C#??U@%e!~r%_N#YmXXn_xDZxZ>HMN&o0Q5<3V^n$GYg? zqm%dy^0yl<=Pl6v>K8hND14raCA(vlHR+qRA%y*T3lRzKq&Bd-#e|a&(o-zr&15;E ztW}3|f(_Q}{FM8uF~I$pteY?NqvRuhab`geAFJQPr<^<_A{1s0CNq2X5HrO_<*-#2 z?s;aycm~|2J@jICQU|L`MSyU$_r}BG&qFT~cpb*Pv&Acpj#d6ZF8La_AEdg%#^zCTYV8lH5(&MdJ#}`Yq z??FGy($1WFEk9aXL}w8KhXAvm_nvGaLDyGHz#OkqSZ+z!4(6kNcKm;(n9X^klkla( G$$tRqC}U&* literal 0 HcmV?d00001 diff --git a/control/control.pro b/control/control.pro index 4d164fe..973bbea 100644 --- a/control/control.pro +++ b/control/control.pro @@ -9,4 +9,5 @@ SUBDIRS += navbutton SUBDIRS += savelog SUBDIRS += saveruntime SUBDIRS += smoothcurve -SUBDIRS += zhtopy \ No newline at end of file +SUBDIRS += zhtopy +SUBDIRS += cpumemorylabel \ No newline at end of file diff --git a/control/cpumemorylabel/cpumemorylabel.cpp b/control/cpumemorylabel/cpumemorylabel.cpp new file mode 100644 index 0000000..bc5967e --- /dev/null +++ b/control/cpumemorylabel/cpumemorylabel.cpp @@ -0,0 +1,239 @@ +#pragma execution_character_set("utf-8") + +#include "cpumemorylabel.h" +#include "qtimer.h" +#include "qprocess.h" +#include "qdebug.h" + +#ifdef Q_OS_WIN +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x502 +#endif +#include "windows.h" +#endif + +#define MB (1024 * 1024) +#define KB (1024) + +CpuMemoryLabel::CpuMemoryLabel(QWidget *parent) : QLabel(parent) +{ + totalNew = idleNew = totalOld = idleOld = 0; + + cpuPercent = 0; + memoryPercent = 0; + memoryAll = 0; + memoryUse = 0; + + //获取CPU占用情况定时器 + timerCPU = new QTimer(this); + connect(timerCPU, SIGNAL(timeout()), this, SLOT(getCPU())); + + //获取内存占用情况定时器 + timerMemory = new QTimer(this); + connect(timerMemory, SIGNAL(timeout()), this, SLOT(getMemory())); + + //执行命令获取 + process = new QProcess(this); + connect(process, SIGNAL(readyRead()), this, SLOT(readData())); + + showText = true; +} + +CpuMemoryLabel::~CpuMemoryLabel() +{ + this->stop(); +} + +void CpuMemoryLabel::start(int interval) +{ + this->getCPU(); + this->getMemory(); + + if (!timerCPU->isActive()) { + timerCPU->start(interval); + } + if (!timerMemory->isActive()) { + timerMemory->start(interval + 1000); + } +} + +void CpuMemoryLabel::stop() +{ + process->close(); + if (timerCPU->isActive()) { + timerCPU->stop(); + } + if (timerMemory->isActive()) { + timerMemory->stop(); + } +} + +void CpuMemoryLabel::getCPU() +{ +#ifdef Q_OS_WIN +#if 0 + static FILETIME lastIdleTime; + static FILETIME lastKernelTime; + static FILETIME lastUserTime; + + FILETIME newIdleTime; + FILETIME newKernelTime; + FILETIME newUserTime; + + //采用GetSystemTimes获取的CPU占用和任务管理器的不一致 + GetSystemTimes(&newIdleTime, &newKernelTime, &newUserTime); + + int offset = 31; + quint64 a, b; + quint64 idle, kernel, user; + + a = (lastIdleTime.dwHighDateTime << offset) | lastIdleTime.dwLowDateTime; + b = (newIdleTime.dwHighDateTime << offset) | newIdleTime.dwLowDateTime; + idle = b - a; + + a = (lastKernelTime.dwHighDateTime << offset) | lastKernelTime.dwLowDateTime; + b = (newKernelTime.dwHighDateTime << offset) | newKernelTime.dwLowDateTime; + kernel = b - a; + + a = (lastUserTime.dwHighDateTime << offset) | lastUserTime.dwLowDateTime; + b = (newUserTime.dwHighDateTime << offset) | newUserTime.dwLowDateTime; + user = b - a; + + cpuPercent = float(kernel + user - idle) * 100 / float(kernel + user); + + lastIdleTime = newIdleTime; + lastKernelTime = newKernelTime; + lastUserTime = newUserTime; + this->setData(); +#else + //获取系统版本区分win10 + bool win10 = false; +#if (QT_VERSION >= QT_VERSION_CHECK(5,4,0)) + win10 = (QSysInfo::productVersion().mid(0, 2).toInt() >= 10); +#else + win10 = (QSysInfo::WindowsVersion >= 192); +#endif + + QString cmd = "\\Processor(_Total)\\% Processor Time"; + if (win10) { + cmd = "\\Processor Information(_Total)\\% Processor Utility"; + } + + if (process->state() == QProcess::NotRunning) { + process->start("typeperf", QStringList() << cmd); + } +#endif + +#elif defined(Q_OS_UNIX) && !defined(Q_OS_WASM) + if (process->state() == QProcess::NotRunning) { + totalNew = idleNew = 0; + process->start("cat", QStringList() << "/proc/stat"); + } +#endif +} + +void CpuMemoryLabel::getMemory() +{ +#ifdef Q_OS_WIN + MEMORYSTATUSEX statex; + statex.dwLength = sizeof(statex); + GlobalMemoryStatusEx(&statex); + memoryPercent = statex.dwMemoryLoad; + memoryAll = statex.ullTotalPhys / MB; + memoryFree = statex.ullAvailPhys / MB; + memoryUse = memoryAll - memoryFree; + this->setData(); + +#elif defined(Q_OS_UNIX) && !defined(Q_OS_WASM) + if (process->state() == QProcess::NotRunning) { + process->start("cat", QStringList() << "/proc/meminfo"); + } +#endif +} + +void CpuMemoryLabel::readData() +{ +#ifdef Q_OS_WIN + while (!process->atEnd()) { + QString s = QLatin1String(process->readLine()); + s = s.split(",").last(); + s.replace("\r", ""); + s.replace("\n", ""); + s.replace("\"", ""); + if (!s.isEmpty() && s.length() < 10) { + cpuPercent = qRound(s.toFloat()); + } + } +#elif defined(Q_OS_UNIX) && !defined(Q_OS_WASM) + while (!process->atEnd()) { + QString s = QLatin1String(process->readLine()); + if (s.startsWith("cpu")) { + QStringList list = s.split(" "); + idleNew = list.at(5).toUInt(); + foreach (QString value, list) { + totalNew += value.toUInt(); + } + + quint64 total = totalNew - totalOld; + quint64 idle = idleNew - idleOld; + cpuPercent = 100 * (total - idle) / total; + totalOld = totalNew; + idleOld = idleNew; + break; + } else if (s.startsWith("MemTotal")) { + s.replace(" ", ""); + s = s.split(":").at(1); + memoryAll = s.left(s.length() - 3).toUInt() / KB; + } else if (s.startsWith("MemFree")) { + s.replace(" ", ""); + s = s.split(":").at(1); + memoryFree = s.left(s.length() - 3).toUInt() / KB; + } else if (s.startsWith("Buffers")) { + s.replace(" ", ""); + s = s.split(":").at(1); + memoryFree += s.left(s.length() - 3).toUInt() / KB; + } else if (s.startsWith("Cached")) { + s.replace(" ", ""); + s = s.split(":").at(1); + memoryFree += s.left(s.length() - 3).toUInt() / KB; + memoryUse = memoryAll - memoryFree; + memoryPercent = 100 * memoryUse / memoryAll; + break; + } + } +#endif + this->setData(); +} + +void CpuMemoryLabel::setData() +{ + cpuPercent = (cpuPercent < 0 ? 0 : cpuPercent); + cpuPercent = (cpuPercent > 100 ? 0 : cpuPercent); + QString msg = QString("CPU %1% Mem %2% ( 已用 %3 MB / 共 %4 MB )").arg(cpuPercent).arg(memoryPercent).arg(memoryUse).arg(memoryAll); + if (showText) { + this->setText(msg); + } + + emit textChanged(msg); + emit valueChanged(cpuPercent, memoryPercent, memoryAll, memoryUse, memoryFree); +} + +QSize CpuMemoryLabel::sizeHint() const +{ + return QSize(300, 30); +} + +QSize CpuMemoryLabel::minimumSizeHint() const +{ + return QSize(30, 10); +} + +bool CpuMemoryLabel::getShowText() const +{ + return this->showText; +} + +void CpuMemoryLabel::setShowText(bool showText) +{ + this->showText = showText; +} diff --git a/control/cpumemorylabel/cpumemorylabel.h b/control/cpumemorylabel/cpumemorylabel.h new file mode 100644 index 0000000..fee6d3e --- /dev/null +++ b/control/cpumemorylabel/cpumemorylabel.h @@ -0,0 +1,75 @@ +#ifndef CPUMEMORYLABEL_H +#define CPUMEMORYLABEL_H + +/** + * CPU内存显示控件 作者:feiyangqingyun(QQ:517216493) 2016-11-18 + * 1. 实时显示当前CPU占用率。 + * 2. 实时显示内存使用情况。 + * 3. 包括共多少内存、已使用多少内存。 + * 4. 全平台通用,包括windows、linux、ARM。 + * 5. 发出信号通知占用率和内存使用情况等,以便自行显示到其他地方。 + */ + +#include + +class QProcess; + +#ifdef quc +class Q_DECL_EXPORT CpuMemoryLabel : public QLabel +#else +class CpuMemoryLabel : public QLabel +#endif + +{ + Q_OBJECT + + Q_PROPERTY(bool showText READ getShowText WRITE setShowText) + +public: + explicit CpuMemoryLabel(QWidget *parent = 0); + ~CpuMemoryLabel(); + +private: + quint64 totalNew, idleNew, totalOld, idleOld; + + quint64 cpuPercent; //CPU百分比 + quint64 memoryPercent; //内存百分比 + quint64 memoryAll; //所有内存 + quint64 memoryUse; //已用内存 + quint64 memoryFree; //空闲内存 + + QTimer *timerCPU; //定时器获取CPU信息 + QTimer *timerMemory; //定时器获取内存信息 + QProcess *process; //执行命令行 + + bool showText; //自己显示值 + +private slots: + void getCPU(); //获取cpu + void getMemory(); //获取内存 + void readData(); //读取数据 + void setData(); //设置数据 + +public: + //默认尺寸和最小尺寸 + QSize sizeHint() const; + QSize minimumSizeHint() const; + + //获取和设置是否显示文本 + bool getShowText() const; + void setShowText(bool showText); + +public Q_SLOTS: + //开始启动服务 + void start(int interval); + //停止服务 + void stop(); + +Q_SIGNALS: + //文本改变信号 + void textChanged(const QString &text); + //cpu和内存占用情况数值改变信号 + void valueChanged(quint64 cpuPercent, quint64 memoryPercent, quint64 memoryAll, quint64 memoryUse, quint64 memoryFree); +}; + +#endif // CPUMEMORYLABEL_H diff --git a/control/cpumemorylabel/cpumemorylabel.pro b/control/cpumemorylabel/cpumemorylabel.pro new file mode 100644 index 0000000..f115810 --- /dev/null +++ b/control/cpumemorylabel/cpumemorylabel.pro @@ -0,0 +1,17 @@ +QT += core gui +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets +greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat + +TARGET = cpumemorylabel +TEMPLATE = app +DESTDIR = $$PWD/../bin +CONFIG += warn_off + +SOURCES += main.cpp +SOURCES += frmcpumemorylabel.cpp +SOURCES += cpumemorylabel.cpp + +HEADERS += frmcpumemorylabel.h +HEADERS += cpumemorylabel.h + +FORMS += frmcpumemorylabel.ui diff --git a/control/cpumemorylabel/frmcpumemorylabel.cpp b/control/cpumemorylabel/frmcpumemorylabel.cpp new file mode 100644 index 0000000..8dce52d --- /dev/null +++ b/control/cpumemorylabel/frmcpumemorylabel.cpp @@ -0,0 +1,42 @@ +#pragma execution_character_set("utf-8") + +#include "frmcpumemorylabel.h" +#include "ui_frmcpumemorylabel.h" + +frmCpuMemoryLabel::frmCpuMemoryLabel(QWidget *parent) : QWidget(parent), ui(new Ui::frmCpuMemoryLabel) +{ + ui->setupUi(this); + this->initForm(); +} + +frmCpuMemoryLabel::~frmCpuMemoryLabel() +{ + delete ui; +} + +void frmCpuMemoryLabel::initForm() +{ + QFont font; + font.setPixelSize(16); + setFont(font); + + QString qss1 = QString("QLabel{background-color:rgb(0,0,0);color:rgb(%1);}").arg("100,184,255"); + QString qss2 = QString("QLabel{background-color:rgb(0,0,0);color:rgb(%1);}").arg("255,107,107"); + QString qss3 = QString("QLabel{background-color:rgb(0,0,0);color:rgb(%1);}").arg("24,189,155"); + + ui->label1->setStyleSheet(qss1); + ui->label2->setStyleSheet(qss2); + ui->label3->setStyleSheet(qss3); + + connect(ui->label1, SIGNAL(textChanged(QString)), ui->label2, SLOT(setText(QString))); + connect(ui->label1, SIGNAL(valueChanged(quint64, quint64, quint64, quint64, quint64)), + this, SLOT(valueChanged(quint64, quint64, quint64, quint64, quint64))); + ui->label1->start(1000); +} + +void frmCpuMemoryLabel::valueChanged(quint64 cpuPercent, quint64 memoryPercent, quint64 memoryAll, quint64 memoryUse, quint64 memoryFree) +{ + //重新组织文字 + QString msg = QString("CPU: %1% 内存: %2% ( %3 MB / %4 MB )").arg(cpuPercent).arg(memoryPercent).arg(memoryUse).arg(memoryAll); + ui->label3->setText(msg); +} diff --git a/control/cpumemorylabel/frmcpumemorylabel.h b/control/cpumemorylabel/frmcpumemorylabel.h new file mode 100644 index 0000000..aa7826a --- /dev/null +++ b/control/cpumemorylabel/frmcpumemorylabel.h @@ -0,0 +1,27 @@ +#ifndef FRMCPUMEMORYLABEL_H +#define FRMCPUMEMORYLABEL_H + +#include + +namespace Ui { +class frmCpuMemoryLabel; +} + +class frmCpuMemoryLabel : public QWidget +{ + Q_OBJECT + +public: + explicit frmCpuMemoryLabel(QWidget *parent = 0); + ~frmCpuMemoryLabel(); + +private: + Ui::frmCpuMemoryLabel *ui; + +private slots: + void initForm(); + //cpu和内存占用情况数值改变信号 + void valueChanged(quint64 cpuPercent, quint64 memoryPercent, quint64 memoryAll, quint64 memoryUse, quint64 memoryFree); +}; + +#endif // FRMCPUMEMORYLABEL_H diff --git a/control/cpumemorylabel/frmcpumemorylabel.ui b/control/cpumemorylabel/frmcpumemorylabel.ui new file mode 100644 index 0000000..2b4e033 --- /dev/null +++ b/control/cpumemorylabel/frmcpumemorylabel.ui @@ -0,0 +1,73 @@ + + + frmCpuMemoryLabel + + + + 0 + 0 + 800 + 600 + + + + Form + + + + 6 + + + 6 + + + 6 + + + 6 + + + 6 + + + + + + + + Qt::AlignCenter + + + + + + + + + + Qt::AlignCenter + + + + + + + + + + Qt::AlignCenter + + + + + + + + CpuMemoryLabel + QLabel +

cpumemorylabel.h
+ + + + + diff --git a/control/cpumemorylabel/main.cpp b/control/cpumemorylabel/main.cpp new file mode 100644 index 0000000..a24c237 --- /dev/null +++ b/control/cpumemorylabel/main.cpp @@ -0,0 +1,34 @@ +#pragma execution_character_set("utf-8") + +#include "frmcpumemorylabel.h" +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + QFont font; + font.setFamily("Microsoft Yahei"); + font.setPixelSize(13); + a.setFont(font); + +#if (QT_VERSION < QT_VERSION_CHECK(5,0,0)) +#if _MSC_VER + QTextCodec *codec = QTextCodec::codecForName("gbk"); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); +#endif + QTextCodec::setCodecForLocale(codec); + QTextCodec::setCodecForCStrings(codec); + QTextCodec::setCodecForTr(codec); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); + QTextCodec::setCodecForLocale(codec); +#endif + + frmCpuMemoryLabel w; + w.setWindowTitle("CPU内存显示控件 (QQ: 517216493 WX: feiyangqingyun)"); + w.show(); + + return a.exec(); +}