# CircularMenu **Repository Path**: malong1983/CircularMenu ## Basic Information - **Project Name**: CircularMenu - **Description**: No description available - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-29 - **Last Updated**: 2025-10-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 圆形旋转菜单 (Circular Rotating Menu) 这是一个基于Qt C++开发的炫酷圆形旋转菜单控件,参考了CSDN博客中的设计思路并进行了增强。 ## 功能特性 ### 核心功能 - ✅ 圆形扇形菜单布局 - ✅ 流畅的展开/收起动画 - ✅ 旋转动画效果 - ✅ 鼠标悬停交互 - ✅ 可自定义菜单项数量 - ✅ 支持图标和文字显示 ### 样式配置 - 🎨 **颜色自定义**:中心按钮、菜单项、悬停状态等颜色 - 📐 **尺寸控制**:外圆半径、内圆半径、中心按钮大小等比例 - 🔄 **动画设置**:动画时长、旋转效果、缓动曲线 - 🎭 **显示选项**:背景显示、分割线、圆形/扇形菜单项 ### 高级特性 - 🌈 渐变背景支持 - 🎲 随机颜色模式 - 🖱️ 精确的鼠标交互检测 - 📱 响应式布局 - ⚡ 高性能渲染 ## 项目结构 ``` CircularMenu/ ├── roundmenuwidget.h # 圆形菜单控件头文件 ├── roundmenuwidget.cpp # 圆形菜单控件实现 ├── main.cpp # 主程序和演示窗口 ├── CMakeLists.txt # CMake构建文件 ├── CircularMenu.pro # QMake构建文件 └── README.md # 项目说明文档 ``` ## 编译和运行 ### 环境要求 - Qt 6.0+ (推荐) - C++17 编译器 - CMake 3.16+ 或 QMake ### 使用CMake构建 ```bash mkdir build cd build cmake .. cmake --build . ``` ### 使用QMake构建 ```bash qmake CircularMenu.pro make # 或在Windows上使用 nmake 或 mingw32-make ``` ### 在Qt Creator中构建 1. 打开Qt Creator 2. 选择 "Open Project" 3. 打开 `CircularMenu.pro` 或 `CMakeLists.txt` 4. 配置构建套件 5. 点击运行按钮 ## 使用方法 ### 基本用法 ```cpp #include "roundmenuwidget.h" // 创建菜单控件 RoundMenuWidget *menu = new RoundMenuWidget(this); // 添加菜单项 menu->addMenuItem("首页", "返回首页"); menu->addMenuItem("设置", "打开设置", QPixmap(":/icons/settings.png")); // 连接信号 connect(menu, &RoundMenuWidget::menuItemClicked, [](int index) { qDebug() << "点击了菜单项:" << index; }); // 展开/收起菜单 menu->expandMenu(); menu->collapseMenu(); menu->toggleMenu(); ``` ### 样式自定义 ```cpp // 获取当前样式配置 MenuStyleConfig style = menu->getMenuStyle(); // 修改颜色 style.centerButtonColor = QColor(255, 100, 100); style.menuItemBackgroundColor = QColor(100, 100, 255, 100); style.menuItemHoverColor = QColor(200, 200, 200, 150); // 修改尺寸 style.outerRadiusScale = 0.8; // 外圆半径80% style.innerRadiusScale = 0.3; // 内圆半径30% // 修改动画 style.animationDuration = 500; // 动画时长500ms style.enableRotationAnimation = true; // 修改显示选项 style.useRoundMenuItems = true; // 使用圆形菜单项 style.showBackground = true; // 显示背景 style.useRandomColors = false; // 关闭随机颜色 // 应用样式 menu->setMenuStyle(style); ``` ### 渐变背景 ```cpp MenuStyleConfig style = menu->getMenuStyle(); // 添加渐变颜色点 style.gradientColors.clear(); style.gradientColors.append(GradientColorData(0.0, QColor(255, 0, 0, 100))); style.gradientColors.append(GradientColorData(0.5, QColor(0, 255, 0, 100))); style.gradientColors.append(GradientColorData(1.0, QColor(0, 0, 255, 100))); style.showBackground = true; menu->setMenuStyle(style); ``` ## API 参考 ### 主要类 #### RoundMenuWidget 主要的圆形菜单控件类。 **公共方法:** - `addMenuItem()` - 添加菜单项 - `insertMenuItem()` - 插入菜单项 - `removeMenuItem()` - 删除菜单项 - `clearMenuItems()` - 清空所有菜单项 - `setMenuStyle()` - 设置菜单样式 - `expandMenu()` - 展开菜单 - `collapseMenu()` - 收起菜单 - `toggleMenu()` - 切换菜单状态 **信号:** - `menuItemClicked(int index)` - 菜单项被点击 - `menuExpanded()` - 菜单展开 - `menuCollapsed()` - 菜单收起 - `menuToggled(bool expanded)` - 菜单状态切换 #### MenuStyleConfig 菜单样式配置结构体,包含所有可自定义的外观属性。 #### MenuItemData 菜单项数据结构体,包含标题、工具提示、图标等信息。 ## 设计理念 该控件的设计参考了现代UI设计的以下理念: 1. **直观性**:圆形布局符合人眼的自然扫视习惯 2. **流畅性**:动画过渡提供良好的视觉反馈 3. **可定制性**:丰富的样式选项满足不同场景需求 4. **高性能**:优化的绘制算法确保流畅的动画效果 ## 技术实现 ### 核心技术 - **QPainter绘制**:使用Qt的高性能2D绘图API - **属性动画**:QPropertyAnimation实现流畅动画 - **几何计算**:精确的圆形和扇形几何计算 - **事件处理**:完整的鼠标交互事件处理 ### 性能优化 - 智能重绘:只在必要时更新显示 - 路径缓存:预计算几何路径减少计算开销 - 状态管理:高效的悬停状态更新机制 ## 许可证 MIT License - 详见项目根目录下的LICENSE文件。 ## 贡献 欢迎提交Issue和Pull Request来改进这个项目! ## 参考 本项目参考了以下资源: - [Qt官方文档](https://doc.qt.io/) - [CSDN博客 - Qt圆形扇形菜单面板](https://blog.csdn.net/wastelandboy/article/details/123492815) ## 更新日志 ### v1.0.0 - 初始版本发布 - 实现基础圆形菜单功能 - 支持样式自定义 - 添加动画效果 - 完整的演示程序