惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
Jina AI
Jina AI
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
L
LangChain Blog
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
美团技术团队
博客园 - 三生石上(FineUI控件)
N
Netflix TechBlog - Medium
D
DataBreaches.Net
P
Proofpoint News Feed
小众软件
小众软件
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
WordPress大学
WordPress大学
雷峰网
雷峰网
G
Google Developers Blog

埃氮幂の命名空间

埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间
埃氮幂の命名空间
2026-08-24 · via 埃氮幂の命名空间

今天终于提笔写点什么,好好介绍一下这个我倾注了不少心血的开源项目。如果你正在读这篇文章,那说明我们可能有一样的困扰——你也想让自己的桌面变得不一样

效果图

效果图

为什么叫Uniquenium?

其实就是觉得,桌面自定义工具嘛,都能给桌面带来一些独特性,正好没有项目叫这个名字就选它了。(不过后来发现它确实有点长了

为什么要做 Uniquenium?项目定位是什么?

其实刚开始开发的时候,我是不太清楚它有什么过人之处的(羡慕老牌软件Rainmeter)完全凭着对C++/Qt/QML开发的兴趣。项目刚开始的介绍是“集美化与实用功能与一体的桌面自定义工具”,不过我后来发现,我其实并没有打算做这些(都把这些交给开发者用户了,插件里可以有这些功能),Uniquenium主程序只是提供了一个自由的舞台。不仅如此,插件里的QML文件也是可以给使用者自由修改的,于是我把前面的定语改成“高度自由”,这个软件就是给使用者一个自由的修改桌面的平台。

Uniquenium 是什么?

简单来说,Uniquenium 是一个桌面组件容器 + 插件框架

你可以把它理解为一个"桌面的积木系统":主程序提供舞台,插件提供组件,你自由组合、自由摆放、自由定义。所有组件都是透明窗口,可以叠加在任何东西之上——桌面上、游戏旁边、浏览器角落,随你喜欢。

GitHub 项目地址:Uniquenium/Uniquenium

我做了些什么?

一套完整的 UI 控件库(UniDesk Controls)

为了让所有插件都有一致而精美的外观,我先做了一套自己的控件体系。这不是一件容易的事,因为 Windows 上做自定义控件要考虑的细节太多了——DPI 缩放、主题切换、各种边缘 case……

目前控件库包括:

类别控件
容器窗口UniDeskWindow、UniDeskDialog、UniDeskMessageBox
基础交互UniDeskButton、UniDeskTextField、UniDeskTextArea、UniDeskCheckBox、UniDeskRadioButton
选择控件UniDeskComboBox、UniDeskSpinBox、UniDeskSlider、UniDeskColorPicker、UniDeskFontBox
菜单导航UniDeskMenu、UniDeskMenuItem、UniDeskTabBar、UniDeskTabButton
展示控件UniDeskText、UniDeskImage、UniDeskIcon、UniDeskChart、UniDeskInfoBar
高级效果UniDeskAcrylic(亚克力毛玻璃)、UniDeskShadow(阴影)、UniDeskFrame(框架)
选择器UniDeskPosSelector、UniDeskSizeSelector、UniDeskPathSelector、UniDeskHotkeyPicker
其他UniDeskAppBar、UniDeskTooltip、UniDeskComBox、UniDeskComRectEditor

所有控件都原生支持浅色/深色主题,会跟随 Windows 系统设置自动切换。

核心组件系统

在控件之上,我构建了组件系统(UniDeskComponentsData),这是整个应用的骨架:

  • 多页面管理:自由创建、切换、删除页面,每个页面都可以有自己独立的布局
  • 属性面板:每个组件都有专属的属性配置界面,所见即所得
  • JSON 持久化:所有配置自动保存为 JSON 文件,不依赖任何重型数据库
  • 组件类型注册:插件可以注册自己的组件类型,主程序自动识别

插件架构

插件是 Uniquenium 最核心的设计,也是我最满意的部分。

我希望插件开发尽可能简单,于是设计了基于 Qt 插件机制 + QML 动态加载的架构:

CPP
class UniDeskPluginInterface {
    virtual void registerQmlTypes(QQmlApplicationEngine *engine) = 0;
    virtual void initialize() = 0;
};

每个插件只要实现这个接口,放在指定目录下,主程序就会自动加载它。插件可以:

  • 注册自己的 QML 组件
  • 拥有独立的设置存储空间(通过 pluginId 隔离)
  • 接收主程序信号(通过 SignalHandler.qml
  • 动态加载/卸载,无需重启

我还提供了一个完整的示例项目 uq-plugin-example,开发者可以直接照着改,开箱即用。

系统信息与表达式引擎

做桌面工具,自然离不开系统信息。我写了一个完整的系统信息采集模块(UniDeskSystemInfo),可以获取:

  • CPU 使用率、核心数、频率、温度
  • 内存(虚拟内存 + 交换内存)
  • 网络收发速率、丢包率
  • GPU 使用率、显存、温度
  • 磁盘空间
  • 电池电量与充电状态
  • 屏幕分辨率、系统运行时间

然后我基于 exprtk 库做了一个表达式引擎(UniDeskExpr),让你可以在组件里直接用 %cpuPercent 这样的变量来引用系统数据,也支持解析 API 返回的 JSON 响应。这样你就能做出实时监控面板之类的东西。

壁纸系统

壁纸部分(UniDeskCustomWallpaper)我做了三种模式:

  1. API 动态壁纸:定时从你指定的接口获取图片链接,自动更换
  2. 自定义图片:本地或网络图片轮播
  3. 视频壁纸:本地视频直接当桌面壁纸,可以调音量

核心难点在于透明窗口穿透,我通过 Windows API 实现了真正的桌面级嵌入,让组件和壁纸真正融合在一起。

主题与模板

为了让用户能方便地分享和复用桌面配置,我做了主题管理(UniDeskThemeManager)和模板管理(UniDeskTempleteMgr):

  • 主题:一键保存/加载完整的组件布局 + 所有媒体资源,方便分享
  • 模板:将常用组件组合存为模板,支持参数化加载,比如创建一堆样式统一的卡片,再比如从剪贴板粘贴文本、图片为UDCText/UDCImage

全局快捷键 + 自定义光标

通过 QHotkey 库实现了全局热键(UniDeskHotkey),你可以为设置面板、页面管理器等绑定任意快捷键组合。

光标方面(UniDeskCursorManager),支持加载整套自定义光标主题,会自动保存/恢复系统原始光标,卸载时无缝还原。

官方插件包

主程序只是一个框架,真正的灵魂在于插件。我做了一个官方插件包(OfficialPlugin),里面包含了几个实用组件,开箱即用。

1. 输入跟随器(Typing Follower)

这是我个人最喜欢的组件之一。它通过 Windows 全局钩子捕获系统级的键盘和鼠标事件,然后以胶囊动画的形式显示在屏幕上——按键按下时立即出现,释放后延时淡出。

想象一下你录视频时,它能帮你实时展示按了哪些键;或者你只是想炫一下你的桌面,它也是个很酷的装饰。

2. 待办列表(Todo List)

一个完整的桌面待办管理器:增删改查、三种过滤视图(全部/未完成/已完成)、实时统计完成进度、内联编辑、自动保存。小巧但功能齐全。

3. 音频可视化(Audio Visualizer)

基于 Windows WASAPI 接口实时捕获系统音频,做 FFT 频谱分析,然后用平滑的动画展示音频波形。频段数量、颜色、平滑度全部可配置,开着它听歌非常享受。

4. 折线图(Line Chart)

一个真正实用的实时数据可视化组件。支持两种数据源:

  • 表达式源:直接引用 %cpuPercent%memoryUsed 这类系统变量
  • API 源:通过 HTTP 请求获取数据,用表达式提取你想要的值

基于 QML Canvas 绘制,支持网格线、时间轴标注、数据点缓存等。想做一个实时监控面板?直接用它。

5. Twikoo 评论(Twikoo Comments)

一个给博主用的组件。直连 MongoDB,实时展示你博客的 Twikoo 评论系统的评论。支持按页面 URL 过滤、完整的回复链展示、一键测试连接。让你的桌面能看到读者的留言。

技术栈

  • 编程语言:C++ / QML / JavaScript
  • UI 框架:Qt 6
  • 构建系统:CMake
  • 第三方依赖
    • exprtk
      • 表达式解析
    • QHotkey
      • 全局热键
    • MongoDB C++ Driver - 数据库连接
  • 图标Remix Icon

最后想说的话

Uniquenium 是一个我抱着"做一个自己真正想用的工具"的心态开始的项目。它还在持续成长中,有很多想法正在逐步实现——比如更丰富的组件类型、更完善的插件生态、以及我一直在构思的模板系统。

如果你读完这篇文章觉得"嗯,这个东西有点意思",欢迎去 GitHub 看看,点个 star 支持一下。如果你有想法、建议或者想贡献代码,Issues 和 Pull Request 都非常欢迎。

也欢迎访问我的 官方文档DeepWiki 了解更多技术细节。

从零开始,打造属于自己的桌面 —— Uniquenium 开发手记