图片资源等来自于互联网。
本代码仓库仅供学习使用,若被用于商业用途与本人无关!请遵守相关许可证。
Qt-App 是一个基于插件式架构开发的桌面应用程序框架,可用于快速构建功能丰富的跨平台桌面应用。其核心插件系统源自 Qt Creator,并进行了适当修改与增强。
项目特点:
- 🔌 采用插件化架构,支持功能模块的动态加载与管理
- 📦 使用 vcpkg 进行依赖管理
- 🛠️ 同时支持 CMake 和 QMake 构建系统
- 🍎 支持 Apple Silicon 原生编译
- ⚡ 集成 GitHub Actions 自动化编译、打包和发布流程
- 🚨 内置崩溃报告系统 (CrashReport)
使用 CMake 构建
# 配置项目
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=[vcpkg root]/scripts/buildsystems/vcpkg.cmake
# 编译项目
cmake --build build
# 生成翻译文件
cmake --build build --target Qt-App_lupdate
使用 QMake 构建
# 生成 Makefile
qmake Qt-App.pro
# 编译项目
make -j$(nproc)
Qt-App 使用基于 Qt Creator 的插件系统,开发者可以轻松创建自己的功能插件:
- 在
src/plugins/
目录下创建新插件文件夹 - 实现
IPlugin
接口 - 添加插件元数据文件 (
*.json
) - 在
src/plugins/CMakeLists.txt
或src/plugins/plugins.pro
中注册插件
项目支持多语言国际化,翻译文件位于 translations/
目录:
- 生成翻译文件:
cmake --build build --target Qt-App_lupdate
- 发布翻译文件:
cmake --build build --target Qt-App_lrelease
注意:当前更改翻译设置后需要重启程序才能生效
项目提供了多平台打包支持:
- macOS: 使用
packaging/macos/
下的脚本生成 DMG 安装包 - Ubuntu/Debian: 使用
packaging/ubuntu/
配置生成 DEB 包 - Windows: 使用
packaging/windows/
下的 Inno Setup 脚本生成安装程序
-
Ubuntu Wayland: 需要设置环境变量解决窗口移动问题:
qputenv("QT_QPA_PLATFORM", "xcb");
-
macOS Bundle: CMake 生成的应用程序包可能需要手动处理
PkgInfo
文件 -
Unix 系统: 建议使用静态链接避免动态库依赖问题,或正确设置 RPATH
-
vcpkg 限制: 目前 vcpkg 单独支持 x64-osx 和 arm64-osx 架构,需要明确指定:
- CMake:
-DCMAKE_OSX_ARCHITECTURES=x86_64
或-DCMAKE_OSX_ARCHITECTURES=arm64
- QMake:
QMAKE_APPLE_DEVICE_ARCHS=x86_64
或QMAKE_APPLE_DEVICE_ARCHS=arm64
- CMake:
-
Crashpad 权限: 在 Unix 系统下需要确保
crashpad_handler
有执行权限:chmod +x crashpad_handler
Qt-App/
├── cmake/ # CMake 实用函数封装
├── docs/ # 文档和图片资源
├── examples/ # 示例代码
│ └── i18n/ # 国际化示例
├── packaging/ # 打包和发布配置
│ ├── macos/ # macOS 打包脚本
│ ├── ubuntu/ # Ubuntu/Debian 打包配置
│ └── windows/ # Windows 打包脚本
├── src/ # 源代码
│ ├── 3rdparty/ # 第三方库
│ │ ├── qtsingleapplication/ # Qt 单实例应用支持
│ │ └── ui_watchdog/ # UI 看门狗组件
│ ├── aggregation/ # 聚合功能模块
│ ├── apps/ # 应用程序入口
│ │ ├── app/ # 主应用程序
│ │ └── crashreport/ # 崩溃报告程序
│ ├── core/ # 核心基础模块
│ ├── dump/ # 崩溃捕捉功能
│ │ ├── breakpad/ # Google Breakpad 封装
│ │ └── crashpad/ # Google Crashpad 封装
│ ├── extensionsystem/ # 插件系统(源自 Qt Creator)
│ ├── plugins/ # 功能插件
│ │ ├── aboutplugin/ # 关于插件
│ │ ├── coreplugin/ # 核心插件(主界面、菜单等)
│ │ ├── guiplugin/ # GUI 组件插件
│ │ ├── hashplugin/ # 哈希算法插件
│ │ ├── helloplugin/ # Hello 测试插件
│ │ └── systeminfoplugin/# 系统信息插件
│ ├── resource/ # 资源文件(图标、样式表等)
│ ├── solutions/ # 解决方案组件
│ │ ├── spinner/ # 加载指示器
│ │ ├── tasking/ # 任务处理
│ │ └── terminal/ # 终端模拟
│ ├── utils/ # 工具函数库
│ └── widgets/ # 自定义界面组件
├── tests/ # 测试代码
├── translations/ # 国际化翻译文件
└── 配置文件等