# qtcanpool **Repository Path**: icanpool/qtcanpool ## Basic Information - **Project Name**: qtcanpool - **Description**: A Qt project template and component library framework, distilled from Qt Creator's source structure. - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 228 - **Forks**: 175 - **Created**: 2018-07-21 - **Last Updated**: 2026-10-11 ## Categories & Tags **Categories**: desktop-ui **Tags**: qtcanpool, framelesshelper, Ribbon, Docking, QxRibbon ## README # qtcanpool
[![CI](https://github.com/canpool/qtcanpool/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/canpool/qtcanpool/actions/workflows/ci.yml) [![Docs](https://img.shields.io/badge/docs-online-2aa84a.svg)](https://canpool.github.io/qtcanpool/) [![Demo](https://img.shields.io/badge/demo-online-2aa84a.svg)](https://canpool.github.io/qtcanpool/demo/) [![License: MulanPSL-2.0](https://img.shields.io/badge/License-MulanPSL--2.0-blue.svg)](./LICENSE) [![Qt](https://img.shields.io/badge/Qt-5.15%20%7C%206.x-41CD52.svg)](https://www.qt.io/) [![C++17](https://img.shields.io/badge/C%2B%2B-17-00599C.svg)](https://isocpp.org/)
一套总结自 Qt Creator 源码结构的通用项目管理模板,核心库基于 QtWidgets 构建,集成了 Ribbon、可停靠窗口(Dock)、自定义窗口(Window)等常用界面组件,并自带插件体系(qxplugin)与第三方类库。 qtcanpool 旨在提供优秀的项目管理方式、多样的选择与优质的控件。 ## 主要组件 | 组件 | 命名空间 | 说明 | | :--- | :------- | :--- | | **qxcore** | `QxCore` | 基础设施库:配置(`QxSettings`)、日志(`QxLogger`)、语言切换(`QxTranslator`),仅依赖 Qt Core | | **qxtheme** | `QxTheme` | 主题引擎:调色板 + 样式表统一应用(Office / WPS / Dark)、运行时切换、选择持久化、跟随系统深浅色 | | **qxribbon** | `QxRibbon` | Ribbon 风格界面组件(菜单栏 / 页 / 分组等) | | **qxdock** | `QxDock` | 可停靠窗口组件(布局管理、浮动容器等) | | **qxwindow** | `QxWindow` | 自定义窗口组件(无边框窗口、系统按钮代理等) | | **qxplugin** | `QxPlugin` | 插件体系:插件契约(`QxPlugin`)、宿主上下文(`QxPluginContext`)、加载与依赖解析(`QxPluginManager`)、对象池(`QxObjectPool`) | | **qxapp** | `QxApp` | 应用框架库:`RibbonAppWindow`(无边框 Ribbon 窗口)与 `QxAppShell` 应用外壳(导航轨 + 页面栈 + 停靠区 + 状态栏 + 启动屏 + 布局持久化)、应用内通知(`QxToast`)、设置界面(`QxPropertyEditor` / `QxSettingsDialog`) | | **qtcompat** | — | Qt 5 / Qt 6 跨版本兼容辅助头(header-only) | > **qcanpool 已于 3.2 删除。** 它在 3.1 已被清空(legacy Ribbon 物理移除、11 个遗留控件下线、 > 7 个通用控件迁入 `qxapp` 并改名),只剩 7 个带弃用告警的转发头;3.2 连这个库一起消失, > **旧名不再存在**。迁移见 [`doc/design/3.0-MIGRATION.md`](./doc/design/3.0-MIGRATION.md)。 ## 仓库 - GitHub:[https://github.com/canpool/qtcanpool](https://github.com/canpool/qtcanpool) - Gitee:[https://gitee.com/icanpool/qtcanpool](https://gitee.com/icanpool/qtcanpool) ## 文档 - **在线文档**:[https://canpool.github.io/qtcanpool/](https://canpool.github.io/qtcanpool/) —— C++ API 参考(Doxygen)+ 使用指南,由 GitHub Actions 从 `master` 自动发布 - **本地构建文档站点**:只需要 Doxygen(和可选的 Graphviz),**不需要 Qt**,因为文档直接读头文件而非编译 ```bash cmake -S doc -B build-docs cmake --build build-docs --target docs # 产物在 build-docs/html/index.html ``` - 指南源码在 [`doc/pages`](./doc/pages)(构建、架构、组件、主题、AppShell、插件、迁移),与 API 一同发布 ## 在线体验 `AppShellDemo` 已编译为 WebAssembly,可直接在浏览器中打开,无需安装 Qt 或编译器: - **在线 demo**:[https://canpool.github.io/qtcanpool/demo/](https://canpool.github.io/qtcanpool/demo/) —— 一个完整的应用外壳:侧边导航、页面切换、可停靠面板、主题切换与布局持久化 ## 教程 - [使用教程](https://blog.csdn.net/canpool/category_10631139.html) - [官方文档](https://blog.csdn.net/canpool/article/details/114523758) ## 目录结构 | 一级目录 | 二级目录 | 说明 | | :------- | :------- | :--- | | `cmake` | | CMake 构建框架 | | `demos` | | 综合示例程序 | | `doc` | | 文档:Doxygen 站点源码(`Doxyfile.in`、`pages/` 指南、`qtcanpool-doxygen.css`)与设计文档 | | `examples` | | 控件级示例(`WITH_EXAMPLES`,默认随构建编译) | | `projects` | | 项目示例:`template` 最小应用模板、`consume` SDK 消费验证 | | `scripts` | | 辅助脚本:`new-project` 生成新工程骨架、`push` 推送双远程、`project.py` 工程工具 | | `src` | `libs` | 基础类库 | | | `modules` | 插件样板模块:`output` / `notebook` / `filetree`(K16 样板定位) | | | `plugins` | 框架自身功能插件(预留,当前只有分层骨架) | | | `shared` | 共享的实用代码 | | `tests` | | 单元测试(CTest) | | `thirdparty` | | 第三方库使用案例 | ## 环境要求 **自 3.0 起的基线:** - Qt **5.15** 及以上(主推 Qt 6.5 / 6.8 LTS) - C++17 - CMake 3.16+(推荐最新版本) **历史测试环境**(2.x 时期验证,3.0 不再保证): - Qt 6.8.1 / 6.5.3 / 5.15.2 / 5.14.2 / 5.12.12 / 5.11.1(MinGW / MSVC,64bit) - 其它环境未测试,推荐使用 [Qt LTS](https://download.qt.io/official_releases/qt/) 版本 ## 构建 **CMake 是唯一构建方式**(qmake 已于 4.0 移除,全树不再有 `.pro` / `.pri`)。 ```bash # 配置(Qt 通过 CMAKE_PREFIX_PATH 指定) cmake -S . -B build -DCMAKE_PREFIX_PATH=/<版本>/<编译器> -DCMAKE_BUILD_TYPE=Release # 编译 cmake --build build --config Release --parallel # 运行单元测试 ctest --test-dir build -C Release --output-on-failure ``` 说明: - 各功能开关(`WITH_DEMOS`、`WITH_TESTS`、`WITH_DOCS` 等)可通过 `cmake -S . -B build -LH` 查看 - `-DWITH_DOCS=ON` 会把文档站点目标 `docs` 一并加入主构建(只需 Doxygen);只想要文档时用上面的 `cmake -S doc -B build-docs` - 亦可使用 Qt Creator 直接打开根目录 `CMakeLists.txt` - 编译出的 demo 位于构建目录的 `bin/`(Windows)或 `libexec/qtproject/`(其它平台),例如 `RibbonDemo`、`DockDemo`、`AppShellDemo`(应用外壳:导航 + 页面 + 停靠 + 主题 + 布局持久化)、`IdeShellDemo`(插件化外壳:宿主不认识任何模块) 安装与下游消费: ```bash # 公开头文件与 CMake 包配置位于 Devel 组件,需显式安装 cmake --install build --config Release --prefix <安装目录> cmake --install build --config Release --prefix <安装目录> --component Devel ``` 下游工程 `find_package(QtCanpool)` 后可直接链接 `QtCanpool::qxcore` / `QtCanpool::qxribbon` / `QtCanpool::qxapp` 等目标; 仓库内 `projects/consume` 是最小下游示例,vcpkg / Conan 骨架见 `ports/`(未经 CI 验证)。 ## 路线图 - [3.0 开发规划](./doc/ROADMAP-3.0.md) - [3.x / 4.0 开发规划](./doc/ROADMAP-3.x.md) - [4.0 任务清单(进行中)](./doc/design/4.0-TASKS.md) - [2.x → 3.0 迁移指南](./doc/design/3.0-MIGRATION.md) - [M1 任务清单](./doc/design/3.0-M1-TASKS.md) - [M2 任务清单](./doc/design/3.0-M2-TASKS.md) - [M3 任务清单](./doc/design/3.0-M3-TASKS.md) - [M4 任务清单](./doc/design/3.0-M4-TASKS.md) ## 版本 - 格式:`x.y.z`(主版本.次版本.补丁版本) ## 分支 | 分支 | 说明 | | :--- | :--- | | [master](https://gitee.com/icanpool/qtcanpool/tree/master/) | 主线分支(4.0 起为开发主线) | | [develop](https://gitee.com/icanpool/qtcanpool/tree/develop/) | 历史分支,开发已统一到 master | | [release-3.x](https://gitee.com/icanpool/qtcanpool/tree/release-3.x/) | 3.x 维护分支(4.0 起不再新建 release-4.x) | - 版本发布以 tag 标记;若某版本存在需修复的缺陷,将以对应版本分支的形式进行维护 ## 开发规范 - C++ 风格:[Google C++ Style Guide](http://google.github.io/styleguide/cppguide.html)、[Qt 编程风格与规范](https://blog.csdn.net/qq_35488967/article/details/70055490) - 源文件编码:全英文源文件采用 UTF-8;包含中文的采用 UTF-8 with BOM - **代码中的注释一律使用英文**(文档等 `.md` 文件不拘) - 代码格式化:随仓库提供 [`.clang-format`](./.clang-format)(C++17),CI 中作为强制门禁 - Git 提交格式(**自 3.0 起**):`type(scope): subject`,以区分早期提交格式 - 提交信息一律使用**英文**(subject 与正文) - `type`:`feat` / `fix` / `docs` / `style` / `refactor` / `perf` / `test` / `build` / `ci` / `chore` / `revert` - `scope`:受影响范围,如 `qxcore` / `qxtheme` / `qxribbon` / `qxdock` / `qxwindow` / `qxapp` / `qxplugin` / `project` / `ci` / `test` / `docs` - 示例:`feat(qxribbon): add ribbon gallery group`、`fix(qxwindow): fix taskbar coverage on secondary screen` - 早期提交格式参考:[git 知:提交格式](https://blog.csdn.net/canpool/article/details/126005367) ## 贡献 - 欢迎提交 [issue](https://github.com/canpool/qtcanpool/issues) 对关心的问题发起讨论 - 欢迎 Fork 仓库并通过 pull request 贡献代码 - 贡献者可在文件头版权中添加个人信息,格式如下: ```cpp /** * Copyright (C) YYYY NAME * Copyright (C) 2023 maminjie * SPDX-License-Identifier: MulanPSL-2.0 **/ ``` ## 示例 **dockdemo** ![dockdemo](./doc/pics/dockdemo.png) **ribbondemo** ![ribbondemo](./doc/pics/ribbondemo.gif) 最新版本效果图: ![ribbondemo](./doc/pics/ribbondemo.png) **qxwindow demo** ![qxwindowdemo](./doc/pics/qxwindowdemo.png) **appshell** —— 应用外壳示例(导航轨 + 页面栈 + 停靠区 + 状态栏 + 布局持久化),也是 WebAssembly 在线演示的载体(),构建:`cmake --preset qt6 && cmake --build --preset qt6`。 ## 应用案例 **MyCAD** ![qcanpool](./doc/pics/mycad.png) ![qcanpool](./doc/pics/mycad2.png) MyCAD 是基于 [FreeCAD](https://github.com/FreeCAD/FreeCAD)-1.0.0 源码集成 QxRibbon 组件的作品,旨在实现 FreeCAD 的现代化界面(Ribbon 风格)。 ## 快速体验 下载源码,使用 Qt Creator 打开根目录 `CMakeLists.txt`,在目标中选择 `ribbondemo`、`dockdemo` 或 `AppShellDemo` 运行即可体验(命令行构建见上文「构建」一节)。 ## 扩展 本仓库未来将只维护核心库,其它库将以独立的 `qtcanpool-LIBNAME` 仓库维护,可通过 `qtcanpool` 标签检索: ![extend](./doc/pics/extend.png) ## 赞助 如果您觉得本项目对您有帮助,欢迎赞助,助力项目更好地发展。 ![sponsor](./doc/sponsor/sponsor.png) 赞助名单:[名单](./doc/sponsor/sponsor.md) ## 交流 - QQ 群:831617934(Qt 业余交流) ## 许可 - 本项目遵循 [MulanPSL-2.0](./LICENSE) 开源许可协议 - 集成组件遵循[各自](./LICENSE.NOTES.md)的开源许可协议