[AI Development Lab] 【deepin插件开发活动】QtEasyTier — 基于EasyTier的异地组网工具
Tofloor
poster avatar
Myqfeng
deepin
3 hours ago
Author

QtEasyTier 项目介绍

EasyTier 是近期国内小有名气的一款开源去中心化异地组网工具,内网穿透和异地组网工具,适合远程办公、异地访问、游戏加速等多种场景。

QtEasyTier 是一个基于 Qt 6 / C++ 的 EasyTier 桌面客户端。它提供了直观的图形界面,帮助用户轻松配置和管理虚拟网络,实现跨网络设备的安全通信。作为参赛作品,QtEasyTier 在近期主要的开发是 DTK 风格适配和 DDE 托盘插件的开发。

注意:本项目只是开源工具类软件,并不提供异地组网服务,需要自行解决公网连接问题

主要功能特性

  • 网络实例配置管理:创建、重命名、删除、导入和导出配置。
  • 运行状态实时查看:展示节点信息、运行日志和后端连接状态。
  • 安全模式支持:支持 ET 上游的安全模式相关功能,提升网络安全性
  • 收藏节点管理:维护常用节点信息。
  • DDE 托盘插件:deepin/UOS 用户可在系统托盘插件中快速查看和启动网络实例。

项目地址

本项目以 LGPL 3 协议开源

安装使用

deepin 用户可以在附件页面下载 qteasytier-dde 包进行尝试,包含 amd64 和 arm64 两份安装包,选择对应架构安装即可( arm64 由 CNB 流水线产出,没有实机测试过 )

地址:https://cnb.cool/myqfeng/qteasytier/qt-easy-tier/-/build/logs/cnb-f08-1k195h7bk

后期有更新也会在 CNB 仓库的流水线中自动化构建,可以关注一下

项目截图

截图_选择区域_20260830191226.png
截图_选择区域_20260830191659.png

截图_选择区域_20260830191514.png

项目开发说明

项目的开发主要分为两个阶段,第一个阶段是应用UI的 DTK 风格的适配,第二个阶段是托盘插件的开发。

阶段一:UI适配

截图_选择区域_20260829023153.png

QtEasyTier 之前主要是通过原生 Qt (QML )进行开发的,对于DTK的适配,我的目标是在保证项目原有UI不做大变动的前提下,开发出专门适配DDE的分支。于是,我让 Agent 工具 (OpenCode & DeepSeek) 对项目源码进行研读并且分析dtk-development skill后,讨论出了以下方案:

  • 在 src/qml 中新建 dde 子目录来存放适配 DDE 所需的 qml 文件
  • 主界面 Main.qml 重写为 dde/DdeMain.qml, 适配 DDE 的主窗口。
  • CMake 中新增BUILD_WITH_DDE开关并且注入到宏定义中,在程序中通过设置 DDE 的 Chameleon 风格,并且QML引擎通过条件 engine.load 不同的主窗口QML实现条件编译
  • 对于部分 Chameleon 不能很好适配的组件,单独在 src/qml/dde 中重写,保证与原控件接口的一致性,使用 org.deepin.dtk 的控件进行重写,并在 CMake 中通过条件导入不同的qml文件实现在 DDE 编译分支下使用原生控件。

通过以上的方式,我在尽量不破坏原有项目内容的前提下,增加了对 DDE 的专门适配版本

阶段2: 托盘插件开发

截图_选择区域_20260830013228.png

总体思路:以独立插件的形态构建 .so 动态库,但在代码中复用主程序已有的部分能力,包括配置存放数据库的读写、与Daemon的通信等。

具体的实现逻辑放在src/dde_tray_plugin中,在复用已有组件的基础上独立实现一个轻量的实例状态轮询机制。UI层面,由于此处的界面比较简单,我直接使用 QWidget + QSS 进行制作。插件独立与QtEasyTier前端运行。

写在最后

作为从 deepin 15走到现在的老用户,我其实也一直想为 deepin 生态做点贡献,奈何学识浅薄,没精力研究 DTK 的相关开发教程文档,好在社区开源了相关的 Skills 能力,让我有了将自己的项目适配 DDE 的机会。祝愿 deepin 发展越来越好!


Ps: 对 QtEasyTier 项目感兴趣的小伙伴欢迎加入 QtEasyTier 交流Q群:1081241238

Reply Favorite View the author
All Replies

No replies yet