2016-07-26 169 views
1

我使用Qt Quick的控制2及写上下文菜单下面的代码:如何隐藏菜单项QML

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错误的菜单显示错误。查看屏幕截图: https://s31.postimg.org/c608kdtbv/qqq.png

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

回答

1

除了设置height0到隐藏的项目工程:

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() 
     } 
    } 
} 

这是因为菜单的高度是基于关闭内部ListViewcontentHeight

+0

禁用项目仍然可见。我需要修改菜单。 – MCoder

+0

我知道,这就是为什么我说我不认为它是受支持的用例。其实,也许如果你把高度设置为0。 – Mitch

+0

这也是行不通的。 – MCoder

0

我找到解决方法,但它也不是那么好:

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) 
     } 
    } 
} 
0

在早期的Qt Quick的版本,像控制1.4,你可以使用菜单对象的私有方法:__closeAndDestroy()

但是这种私人方法并不能保证。