QML Menu动态添加子Menu

自用 防忘。在网上找了半天没看到合适的,问了半天AI也没结果,只好自己写一个。

动态

动态添加需要用JS代码和Component组件:

menuBar: MenuBar {
    Menu {
        id: menu
        title: 'menu'
        MenuItem {
            text: 'a'
        }
        MenuItem {
            text: 'b'
        }
    }
}

Component {
    id: subMenu
    Menu {
        property var subItem
        Repeater {
            model: subItem
            MenuItem {
                text: modelData
            }
        }
    }
}

//动态添加子菜单
Component.onCompleted: {
    var tmp = {  //你要添加的数据,可以来自C++、QML或任何地方
        "subMenu1": ['s1', 's2', 's3'],
        "subMenu2": ['m1', 'm2']
    }
    Object.keys(tmp).forEach(key => {
        menu.addMenu(subMenu.createObject(menu, {
            "title": key,
            "subItem": tmp[key]
        }))
    })
}

效果:
在这里插入图片描述

静态

静态不用这么麻烦,可以直接嵌套:

Menu {
    title: 'menu'
    MenuItem {
        text: 'a'
    }
    MenuItem {
        text: 'b'
    }
    Menu { //嵌套
        title: 'subMenu'
        MenuItem {
            text: 's1'
        }
        MenuItem {
            text: 's2'
        }
    }
}

效果:
在这里插入图片描述
Component很好用,不会用的朋友可以去翻一下官方文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值