Qt 如何在QML中隐藏菜单项

Qt 如何在QML中隐藏菜单项,qt,qml,qtquick2,qtquickcontrols2,Qt,Qml,Qtquick2,Qtquickcontrols2,我正在使用Qt Quick Controls 2并为上下文菜单编写以下代码: Menu{ id: contextmenu x: ( parent.width - contextmenu.width ) / 2 y: ( parent.height - contextmenu.height ) / 2 modal: true property int selid MenuItem { text: "Compare"

我正在使用Qt Quick Controls 2并为上下文菜单编写以下代码:

Menu{
    id: contextmenu
    x: ( parent.width - contextmenu.width ) / 2
    y: ( parent.height - contextmenu.height ) / 2
    modal: true

    property int selid

    MenuItem {
        text: "Compare"
        visible: isexp
    }
    Divider{ visible: isexp }
    MenuItem {
        text: "Send..."
        visible: isexp
    }
    Divider{ visible: isexp }
    MenuItem {
        text: "Edit..."
    }
    Divider{}
    MenuItem {
        text: "Delete"
    }
}
分隔器-它是我的组件。isexp是对象的属性。当isexp为false时,菜单显示错误。请参见屏幕截图:


如何更改菜单项的可见性并正确显示菜单。感谢您的建议。

高度设置为
0
除了隐藏项目外,还可以:

import QtQuick 2.6
import QtQuick.Controls 2.0

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    property bool itemsVisible: true

    Menu {
        id: contextmenu
        x: (parent.width - contextmenu.width) / 2
        y: (parent.height - contextmenu.height) / 2
        modal: true

        MenuItem {
            text: "Compare"
            visible: itemsVisible
            height: visible ? implicitHeight : 0
        }
        MenuItem {
            text: "Send..."
            visible: itemsVisible
            height: visible ? implicitHeight : 0
        }
        MenuItem {
            text: "Edit..."
        }
        MenuItem {
            text: "Delete"
        }
    }

    Button {
        text: "Open"
        onClicked: {
            itemsVisible = !itemsVisible
            contextmenu.open()
        }
    }
}

这是因为菜单的高度基于内部
列表视图的
contentHeight
,我找到了解决方法,但效果不太好:

Menu{
    id: contextmenu
    x: ( parent.width - contextmenu.width ) / 2
    y: ( parent.height - contextmenu.height ) / 2
    modal: true

    MenuItem {
        text: "Compare"
    }
    Divider{ }
    MenuItem {
        text: "Send..."
    }
    Divider{ }

    MenuItem {
        text: "Edit..."
    }
    Divider{}
    MenuItem {
        text: "Delete"
    }

    Component.onCompleted: {
        if( !isexp )
        {
            contextmenu.removeItem(0)
            contextmenu.removeItem(0)
            contextmenu.removeItem(0)
            contextmenu.removeItem(0)
        }
    }
}

在早期的Qt quick版本中,如Controls 1.4,您可以使用菜单对象的私有方法:
\uu closeAndDestroy()


但无法保证此私有方法。

禁用的项仍然可见。我需要修改菜单。我知道,这就是为什么我说我不认为它是一个受支持的用例。事实上,如果将高度也设置为0,则可能会发生。。