QML:如何隐藏子菜单?

QML: how to hide submenu?

我有一些菜单,这个菜单包含子菜单。在某些情况下,这个子菜单应该是可见的。在其他情况下,该子菜单应该是不可见的。如何做到这一点?

我尝试使用visible 属性,但它不起作用。子菜单始终可见。在下面的代码示例中,如果我们单击鼠标左键,子菜单应该是可见的,如果我们单击鼠标右键,则子菜单应该是不可见的。但在这两种情况下都是可见的。

import QtQuick 2.13
import QtQuick.Window 2.13
import QtQuick.Controls 2.13

Window {
    visible: true
    width: 640
    height: 480
    property bool visibleSubMenu : false

    Menu {
        id: contextMenu
        MenuItem {
            text: "Menu item"
        }
        Menu {
            title: "Sub menu"
            visible: visibleSubMenu
            MenuItem {
                text: "Sub menu item"
            }
        }
    }

    MouseArea {
        anchors.fill: parent
        acceptedButtons: Qt.LeftButton | Qt.RightButton
        onClicked: {
            if (mouse.button === Qt.RightButton)
                visibleSubMenu = false;
            else 
                visibleSubMenu = true;
            console.log(visibleSubMenu)
            contextMenu.popup()
        }
    }
}

Menu(QQuickMenu) 是一个保存信息的元素,但它不是可视元素,可视元素是它的父元素,即 MenuItem(QQuickMenuItem) 所以你必须隐藏父元素:

property bool visibleSubMenu : true
<b>onVisibleSubMenuChanged: sub_menu.parent.visible = visibleSubMenu</b>

Menu {
    id: contextMenu
    MenuItem {
        text: "Menu item"
    }
    Menu {
        id: sub_menu
        title: "Sub menu"
        MenuItem {
            text: "Sub menu item"
        }
    }
}