【问题标题】:QML: how to hide submenu?QML:如何隐藏子菜单?
【发布时间】:2019-12-04 00:30:46
【问题描述】:

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

我尝试使用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()
        }
    }
}

【问题讨论】:

    标签: qt qml qt5 qtquick2


    【解决方案1】:

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

    property bool visibleSubMenu : true
    onVisibleSubMenuChanged: sub_menu.parent.visible = visibleSubMenu
    
    Menu {
        id: contextMenu
        MenuItem {
            text: "Menu item"
        }
        Menu {
            id: sub_menu
            title: "Sub menu"
            MenuItem {
                text: "Sub menu item"
            }
        }
    }

    【讨论】:

    • 菜单项/菜单的父/子关系是否记录在任何地方?具体来说,Menu 不是视觉元素,但它的父级(菜单项)是需要修改的视觉元素?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2012-11-22
    • 1970-01-01
    相关资源
    最近更新 更多