Skip to content

ElaMenuBar 组件文档 ​

概述 ​

ElaMenuBar 是一个现代化的菜单栏组件,继承自 QMenuBar。它提供了图标支持、主题适配、样式美化等增强特性。

特性 ​

  • 图标支持
  • 主题适配
  • 悬停效果
  • 圆角边框
  • 快捷键支持
  • 子菜单
  • 分隔符
  • 自定义高度

方法 ​

添加菜单 ​

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);

使用示例 ​

基础用法 ​

1. 创建菜单栏 ​

cpp
// 创建菜单栏
ElaMenuBar* menuBar = new ElaMenuBar(this);
menuBar->setFixedHeight(30);

// 添加到窗口
setMenuBar(menuBar);

// 添加菜单项
menuBar->addElaIconAction(
    ElaIconType::Home, 
    "主页"
);

2. 添加子菜单 ​

cpp
// 添加带图标的子菜单
ElaMenu* fileMenu = menuBar->addMenu(
    ElaIconType::File,
    "文件(&F)"
);

// 添加菜单项
fileMenu->addElaIconAction(
    ElaIconType::Save,
    "保存",
    QKeySequence::Save
);

fileMenu->addElaIconAction(
    ElaIconType::Open,
    "打开",
    QKeySequence::Open
);

高级用法 ​

1. 多级菜单 ​

cpp
// 创建一级菜单
ElaMenu* viewMenu = menuBar->addMenu(
    ElaIconType::View,
    "视图(&V)"
);

// 创建二级菜单
ElaMenu* themeMenu = viewMenu->addMenu(
    ElaIconType::Theme,
    "主题"
);

// 添加菜单项
themeMenu->addElaIconAction(
    ElaIconType::Sun,
    "浅色"
);

themeMenu->addElaIconAction(
    ElaIconType::Moon,
    "深色"
);

2. 分组菜单 ​

cpp
// 添加分隔符
menuBar->addSeparator();

// 添加编辑菜单组
ElaMenu* editMenu = menuBar->addMenu(
    "编辑(&E)"
);

editMenu->addElaIconAction(
    ElaIconType::Cut,
    "剪切",
    QKeySequence::Cut
);

editMenu->addElaIconAction(
    ElaIconType::Copy,
    "复制",
    QKeySequence::Copy
);

样式系统 ​

菜单项样式 ​

cpp
void drawControl(CE_MenuBarItem) {
    // 绘制背景
    if (selected || pressed) {
        painter->setBrush(hoverColor);
        painter->drawRoundedRect(rect, 3, 3);
    }
    
    // 绘制图标
    if (!icon.isNull()) {
        icon.paint(painter, iconRect, 
            alignment, mode);
    }
    
    // 绘制文本
    painter->setPen(textColor);
    painter->drawText(textRect, 
        alignment, text);
}

布局算法 ​

cpp
QSize sizeFromContents(CT_MenuBarItem) {
    QSize size = baseSize;
    
    // 设置固定高度
    size.setHeight(menuBarHeight);
    
    // 添加图标空间
    if (!icon.isNull()) {
        size.setWidth(
            size.width() + iconWidth + margin);
    }
    
    return size;
}

注意事项 ​

  1. 继承自 QMenuBar
  2. 自动处理主题切换
  3. 支持快捷键
  4. 智能布局
  5. 样式继承
  6. 注意内存管理
  7. 性能优化
  8. 主题适配

最佳实践 ​

  1. 合理使用图标
  2. 添加快捷键
  3. 控制菜单层级
  4. 分组管理
  5. 注意命名规范
  6. 合理使用分隔符
  7. 保持样式一致
  8. 优化用户体验

相关组件 ​

  • QMenuBar: 基类
  • ElaMenu: 菜单组件
  • ElaIcon: 图标系统
  • ElaTheme: 主题管理