2016-07-26 168 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()

但是這種私人方法並不能保證。