Skip to content

ElaMenu 组件文档 ​

概述 ​

ElaMenu 是一个现代化的菜单组件,继承自 QMenu。它提供了图标支持、动画效果、主题适配等增强特性。

特性 ​

  • 图标支持
  • 弹出动画
  • 主题适配
  • 快捷键支持
  • 子菜单
  • 分隔符
  • 自定义高度
  • 圆角边框

属性 ​

基础属性 ​

cpp
// 菜单项高度
void setMenuItemHeight(int height);
int getMenuItemHeight() const;

方法 ​

添加菜单项 ​

cpp
// 添加子菜单
ElaMenu* addMenu(const QString& title);
ElaMenu* addMenu(const QIcon& icon, const QString& title);
ElaMenu* addMenu(ElaIconType::IconName icon, 
    const QString& title);

// 添加图标动作
QAction* addElaIconAction(
    ElaIconType::IconName icon, 
    const QString& text);
QAction* addElaIconAction(
    ElaIconType::IconName icon,
    const QString& text,
    const QKeySequence& shortcut);

状态查询 ​

cpp
// 是否包含子菜单
bool isHasChildMenu() const;

// 是否包含图标
bool isHasIcon() const;

信号 ​

cpp
// 菜单显示信号
void menuShow();

使用示例 ​

基础用法 ​

1. 创建菜单 ​

cpp
// 创建菜单
ElaMenu* menu = new ElaMenu(this);

// 设置菜单项高度
menu->setMenuItemHeight(27);

// 添加菜单项
menu->addElaIconAction(
    ElaIconType::Copy, 
    "复制",
    QKeySequence::Copy
);

2. 子菜单 ​

cpp
// 添加子菜单
ElaMenu* subMenu = menu->addMenu(
    ElaIconType::Settings,
    "设置"
);

// 添加子菜单项
subMenu->addElaIconAction(
    ElaIconType::Theme,
    "主题设置"
);

高级用法 ​

1. 动态菜单 ​

cpp
void contextMenuEvent(QContextMenuEvent* event) {
    ElaMenu* menu = new ElaMenu(this);
    
    // 根据状态添加菜单项
    if (hasSelection()) {
        menu->addElaIconAction(
            ElaIconType::Copy,
            "复制选中内容"
        );
    }
    
    // 添加分隔符
    if (!menu->isEmpty()) {
        menu->addSeparator();
    }
    
    // 弹出菜单
    menu->popup(event->globalPos());
}

2. 快捷键支持 ​

cpp
// 添加带快捷键的菜单项
menu->addElaIconAction(
    ElaIconType::Save,
    "保存",
    QKeySequence::Save
);

menu->addElaIconAction(
    ElaIconType::Undo,
    "撤销",
    QKeySequence::Undo
);

动画系统 ​

弹出动画 ​

cpp
void showEvent(QShowEvent* event) {
    // 创建位置动画
    QPropertyAnimation* posAnimation = 
        new QPropertyAnimation(this, "y");
    posAnimation->setDuration(400);
    posAnimation->setEasingCurve(
        QEasingCurve::OutCubic);
    
    // 设置动画范围
    if (isTopPopup) {
        posAnimation->setStartValue(-targetY);
    } else {
        posAnimation->setStartValue(targetY);
    }
    posAnimation->setEndValue(0);
    
    // 启动动画
    posAnimation->start(
        QAbstractAnimation::DeleteWhenStopped);
}

注意事项 ​

  1. 继承自 QMenu
  2. 自动处理主题切换
  3. 支持快捷键
  4. 动画时长400ms
  5. 智能分隔符
  6. 注意内存管理
  7. 性能优化
  8. 样式继承

最佳实践 ​

  1. 合理使用图标
  2. 控制菜单层级
  3. 添加快捷键
  4. 处理动画效果
  5. 注意菜单定位
  6. 合理使用分隔符
  7. 保持样式一致
  8. 优化用户体验

相关组件 ​

  • QMenu: 基类
  • ElaIcon: 图标系统
  • ElaTheme: 主题管理
  • QPropertyAnimation: 动画系统