欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > QML 菜单控件:MenuBar、MenuBarItem、Menu、MenuItem层级关系和用法

QML 菜单控件:MenuBar、MenuBarItem、Menu、MenuItem层级关系和用法

2025/4/7 14:59:34 来源:https://blog.csdn.net/u011186532/article/details/147022452  浏览:    关键词:QML 菜单控件:MenuBar、MenuBarItem、Menu、MenuItem层级关系和用法

目录

    • 引言
    • 相关阅读
    • 关于MenuBarItem
    • 核心代码
      • 1. 主菜单栏 (MenuBar.qml)
      • 2. 主页面,包含右键菜单 (MainPage.qml)
      • 3. 主界面绑定 (Main.qml)
      • 整体结构
    • 运行效果
    • 总结
    • 工程下载

引言

在 GUI 开发中,菜单是用户交互的核心组件。QML 提供了一套灵活的菜单控件(MenuBarMenuMenuItem 等),本文将通过代码示例和图解,帮助理解它们的层级关系和用法。

相关阅读

  • Qt 官方文档:QML Menu 类型
  • 菜单层级图(Mermaid):
包含
可包含
触发展开
包含
子菜单(递归)
包含
«顶级容器»
MenuBar
+ 作为主菜单栏容器
+ 包含多个MenuBarItem或Menu
«直接子项»
MenuBarItem
+ 位于MenuBar内
+ 点击展开关联的Menu
«下拉菜单»
Menu
+ 可嵌套层级
+ 包含多个MenuItem
«基础项»
MenuItem
+ 可执行动作
+ 可包含子Menu(形成层级)
«独立弹出菜单»
ContextMenu
+ 由右键触发
+ 结构与Menu类似

关于MenuBarItem

MenuBarItem 在 MenuBar 中显示 Menu。当通过键盘、鼠标或触摸触发 MenuBarItem 时,将显示相应的下拉菜单。MenuBarItem 用作 MenuBar 的默认代理类型。请注意,在使用 MenuBar 时,无需手动声明 MenuBarItem 实例。将 Menu 实例声明为 MenuBar 的子项就足够了,并且会自动创建相应的项。

简单来说,在实际使用的时候,直接使用Menu即可。


核心代码

1. 主菜单栏 (MenuBar.qml)

// MenuBar.qml
import QtQuick
import QtQuick.ControlsMenuBar {Menu {title: "文件"MenuItem { text: "新建"; onTriggered: console.log("新建文件") }MenuItem { text: "打开" }Menu {title: "最近打开"MenuItem { text: "文档1.qml" }MenuItem { text: "项目2.pro" }}}
}

这是一个典型的QML菜单栏(MenuBar)实现,用于创建应用程序的顶部菜单。具体结构如下:

MenuBar
Menu: 文件
MenuItem: 新建
MenuItem: 打开
Menu: 最近打开
MenuItem: 文档1.qml
MenuItem: 项目2.pro

2. 主页面,包含右键菜单 (MainPage.qml)

// MainPage.qml
import QtQuick
import QtQuick.ControlsPane {id: rootanchors.fill: parentText {id: mainTextanchors.centerIn: parenttext: "右键点击显示上下文菜单"font.pixelSize: 16}Menu {id: contextMenuMenuItem {text: "复制"onTriggered: console.log("复制被点击")}MenuItem {text: "粘贴"onTriggered: console.log("粘贴被点击")}MenuItem {text: "剪切"onTriggered: console.log("剪切被点击")}MenuSeparator { }MenuItem {text: "刷新"onTriggered: console.log("刷新被点击")}}MouseArea {anchors.fill: parentacceptedButtons: Qt.RightButtononClicked: function(mouseEvent) {if (mouseEvent.button === Qt.RightButton) {contextMenu.popup()}}}
}

MainPage实现了一个带有右键上下文菜单的页面,在页面中心显示提示文本"右键点击显示上下文菜单"。
菜单结构如下:

Menu: contextMenu
MenuItem: 复制
MenuItem: 粘贴
MenuItem: 剪切
MenuSeparator
MenuItem: 刷新

3. 主界面绑定 (Main.qml)

// Main.qml
import QtQuick
import QtQuick.Controls
import "."  // 添加本地目录导入ApplicationWindow {id: windowwidth: 400height: 400visible: truetitle: "QML菜单示例"// 绑定主菜单栏, 引用 MenuBar.qmlmenuBar: MenuBar { }  // 主要内容区域MainPage { }
} 

Main.qml 定义应用程序主窗口,它包含了一个顶部菜单栏(MenuBar.qml)和主要内容区域(MainPage.qml)。

整体结构

ApplicationWindow
MenuBar
MainPage
Menu: 文件
MenuItem: 新建
MenuItem: 打开
Menu: 最近打开
MenuItem: 文档1.qml
MenuItem: 项目2.pro
Text: 提示文本
Menu: contextMenu
MenuItem: 复制
MenuItem: 粘贴
MenuItem: 剪切
MenuSeparator
MenuItem: 刷新

运行效果

QML菜单示例

  • 主菜单栏点击展开嵌套菜单
  • 右键弹出上下文菜单,菜单项点击触发控制台输出

总结

通过这个示例,可以清晰看到:MenuBar 作为根容器,Menu 管理层级,MenuItem 作为基础操作项,而 ContextMenu 独立处理右键交互。官方文档提供了以下几种类型:
Qt文档
但实际上,开发者只需要其中3种即可(图中圈出的部分:Menu, MenuBar, MenuItem


工程下载

完整代码已上传 GitHub:GitCode - QML Menu示例

GitCode代码

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词