Deepin 社区「10 亿 Token 奖池,写出属于你的 deepin 桌面插件」活动参赛作品 方向三:DTK 创新原生应用 · 作者:kookboy · 许可证:GPL-2.0
说点题外话,我不是专业开发者,只是工作之余对潮流技术感兴趣、喜欢折腾的普通爱好者,也算一路见证了互联网技术的发展。从用 HTML 搭建个人网站起步,到 ASP 网站与论坛、PHP 网站以及 Linux 的学习与安装,各种发行版都被我折腾了个遍——当然,这一切都只是工作之余的兴趣爱好。自从 AI 编程兴起以来,我便把实际遇到的问题、以及解决问题的想法,交给 AI 编程去一一实现,这个过程本身就是一种享受。最后,希望各位网友都能借助 AI 工具,把心中的梦想变成现实!
DeskMon 是一款基于 DTK6 / Qt6(C++17) 原生实现的桌面悬浮系统监控小工具,从原 PyQt5 版迁移而来,自动跟随 deepin 亮/暗主题,单实例运行,自带系统托盘与原生 DTK 控件。**不是脚本拼装,是原生 DTK 应用。
之前用 PyQt5 写过一个系统监控小工具(1601 行),工作能用但有几个痛点:
DProgressBar
DApplication::setSingleInstance()
DPalette
正好借这次活动把它升级成「真·DTK 原生应用」,对应方向三。
~/.config/deskmon/config.json
DNotifySender
DTableWidget
DDialog
MetricRow
QThreadPool
nvidia-smi --query-gpu=...
/proc/[pid]
DGuiApplicationHelper::setPaletteType
org.deepin.dde.Appearance1.Changed
DCircleProgress
DApplication::setSingleInstance("deskmon")
DWidget
DBlurEffectWidget
DUtil::DNotifySender
DFloatingMessage
本作品全程借助 deepin Skills 仓库的 dtk-development 模块完成(仓库共 4 个 Skill,本作品是应用非插件,仅使用该模块)。
dtk-development
实际调用并落地到代码的 references 文档:
widgets/application.md
DApplication
newInstanceStarted
main.cpp:62-89
widgets/window.md
monitorwidget.h:29-33
widgets/blur-effect.md
AutoColor
monitorwidget.cpp:128-136
widgets/progress.md
metricrow.cpp:51
widgets/dialog.md
settings_dialog.cpp:20-31
widgets/view.md
gpu_dialog.h:8-38
theme/palette.md
DPalette::Highlight
themecolors.cpp:11-14
theme/theme-switch.md
themeTypeChanged
monitorwidget.cpp:95
utilities/gui-helper.md
setPaletteType(DarkType/LightType)
main.cpp:32-36
utilities/dbus.md
Appearance1.Changed
main.cpp:18-86
utilities/desktop-services.md
pomodoro.cpp:194
monitorwidget.cpp:564
app-dev-with-dtk.md
debian/control
CMakeLists.txt:17-20
dtksrc-compile-debug.md
DLogManager
deskmon_1.0.0-1_amd64.zip此压缩包内提供了 .deb 安装包(99 KB),依赖自动解析,安装后从启动器搜「DeskMon / 桌面监控」即可。
.deb
# 安装(apt 会自动按 Recommends 拉装 nvidia-smi,无 N 卡也正常装) sudo apt install ./deskmon_1.0.0-1_amd64.deb # 卸载(保留 ~/.config/deskmon 用户配置) sudo apt remove deskmon
包元数据:
Installed-Size: 345 KB
dpkg-gencontrol
Recommends: nvidia-smi
dh_shlibdeps
libdtk6*
libqt6*
查看安装大小:dpkg -l deskmon 或 apt show deskmon | grep Installed-Size
dpkg -l deskmon
apt show deskmon | grep Installed-Size
# 本机工具链在自定义前缀(Qt 6.8.0 + DTK6 6.7.44),标准系统包环境下可省略 CMAKE_PREFIX_PATH cmake -S . -B build -DCMAKE_PREFIX_PATH="$HOME/jm-prefix/usr" -DCMAKE_BUILD_TYPE=Debug cmake --build build -j"$(nproc)" # 或用快速启动脚本(build/run/clean 三模式) ./start.sh # 增量编译后启动 ./start.sh clean # 清理后全量编译并启动 # deb 打包 dpkg-buildpackage -b -us -uc -d mkdir -p dist && cp ../deskmon_*.deb dist/
仓库地址:Gitee - yngeek/deskmon
许可证:GPL-2.0
致谢:感谢 deepin 社区的 dtk-development Skill 文档,让一个 PyQt5 老项目能顺利迁移成原生 DTK6 应用。希望这个工具对大家有用,欢迎 issue / PR / 星标 ✨
编程代理工具: 智谱Zcode v3.7.5
当前token紧张,心中还有个想法让它能以透明浮动条的形式呈现。等缓一下,继续迭代。
Featured Collection
Popular Ranking
Popular Events
【deepin 插件开发活动】DeskMon —— DTK6 原生桌面系统监控
说点题外话,我不是专业开发者,只是工作之余对潮流技术感兴趣、喜欢折腾的普通爱好者,也算一路见证了互联网技术的发展。从用 HTML 搭建个人网站起步,到 ASP 网站与论坛、PHP 网站以及 Linux 的学习与安装,各种发行版都被我折腾了个遍——当然,这一切都只是工作之余的兴趣爱好。自从 AI 编程兴起以来,我便把实际遇到的问题、以及解决问题的想法,交给 AI 编程去一一实现,这个过程本身就是一种享受。最后,希望各位网友都能借助 AI 工具,把心中的梦想变成现实!
一句话介绍
DeskMon 是一款基于 DTK6 / Qt6(C++17) 原生实现的桌面悬浮系统监控小工具,从原 PyQt5 版迁移而来,自动跟随 deepin 亮/暗主题,单实例运行,自带系统托盘与原生 DTK 控件。**不是脚本拼装,是原生 DTK 应用。
DeskMon 浅色主题
DeskMon 暗色主题
托盘右键设置菜单
为什么做
之前用 PyQt5 写过一个系统监控小工具(1601 行),工作能用但有几个痛点:
DProgressBar语义化配色DApplication::setSingleInstance()DPalette跟随系统活跃色正好借这次活动把它升级成「真·DTK 原生应用」,对应方向三。
功能清单
MVP 核心
~/.config/deskmon/config.json一些特点
DNotifySender系统通知,运行时番茄图标呼吸脉动动画DPalette语义化配色,指标色由系统活跃色派生,明暗主题自动调亮度DTableWidget列出显存占用进程 +DDialog确认释放DNotifySender,悬浮窗隐藏时也能提醒)原版【https://bbs.deepin.org.cn/post/296554】没有、新版做的
MetricRow(点 + 名称 + 百分比 + 细条 + 附加信息)替代占高度的环形技术栈与关键 API
QThreadPool后台异步调nvidia-smi --query-gpu=...,结果回主线程缓存(不阻塞 UI)/proc/[pid](Linux 原生,无 psutil)DPalette+DGuiApplicationHelper::setPaletteType+ DBus 监听org.deepin.dde.Appearance1.ChangedDProgressBar(实测比DCircleProgress紧凑)DApplication::setSingleInstance("deskmon")DWidget+DBlurEffectWidget悬浮窗(磨砂 + 圆角 + AutoColor 遮罩)DUtil::DNotifySender(无边框悬浮窗场景比DFloatingMessage可靠)基于 deepin Skill 的开发过程
本作品全程借助 deepin Skills 仓库的
dtk-development模块完成(仓库共 4 个 Skill,本作品是应用非插件,仅使用该模块)。实际调用并落地到代码的 references 文档:
widgets/application.mdDApplication入口、单实例、newInstanceStarted激活main.cpp:62-89widgets/window.mdDWidgetmonitorwidget.h:29-33widgets/blur-effect.mdDBlurEffectWidget磨砂+圆角、AutoColor跟随主题monitorwidget.cpp:128-136widgets/progress.mdDProgressBar紧凑指标条metricrow.cpp:51widgets/dialog.mdDDialog设置/GPU/进程对话框settings_dialog.cpp:20-31widgets/view.mdDTableWidget进程/显存表gpu_dialog.h:8-38theme/palette.mdDPalette::Highlight派生指标配色themecolors.cpp:11-14theme/theme-switch.mdthemeTypeChanged联动刷新monitorwidget.cpp:95utilities/gui-helper.mdsetPaletteType(DarkType/LightType)主动同步main.cpp:32-36utilities/dbus.mdAppearance1.Changed补 GlobalTheme 跟随main.cpp:18-86utilities/desktop-services.mdDNotifySender番茄钟/阈值告警通知pomodoro.cpp:194、monitorwidget.cpp:564app-dev-with-dtk.mddebian/control模板CMakeLists.txt:17-20dtksrc-compile-debug.mdDLogManager破坏事件循环定位安装
deskmon_1.0.0-1_amd64.zip此压缩包内提供了
.deb安装包(99 KB),依赖自动解析,安装后从启动器搜「DeskMon / 桌面监控」即可。包元数据:
Installed-Size: 345 KB(dpkg-gencontrol自动计算)Recommends: nvidia-smi(软依赖,无 N 卡用户也能安装,启动时自动降级隐藏 GPU 面板)dh_shlibdeps自动生成(libdtk6*、libqt6*)查看安装大小:
dpkg -l deskmon或apt show deskmon | grep Installed-Size源码构建
仓库
仓库地址:Gitee - yngeek/deskmon
许可证:GPL-2.0
适用环境
致谢:感谢 deepin 社区的
dtk-developmentSkill 文档,让一个 PyQt5 老项目能顺利迁移成原生 DTK6 应用。希望这个工具对大家有用,欢迎 issue / PR / 星标 ✨注:因token有限,使用了几个API模型.
编程代理工具: 智谱Zcode v3.7.5
编程过程期间截图: