如何在 QML 中隐藏菜单项
Posted
技术标签:
【中文标题】如何在 QML 中隐藏菜单项【英文标题】:How to hide menu items in QML 【发布时间】:2016-07-26 07:53:54 【问题描述】:我正在使用 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 菜单显示错误时。看截图: https://s31.postimg.org/c608kdtbv/qqq.png
如何更改菜单项的可见性并正确显示菜单。感谢您的建议。
【问题讨论】:
【参考方案1】:除了隐藏项目之外,将height
设置为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()
这是因为菜单的高度基于内部ListView
的contentHeight
。
【讨论】:
禁用的项目仍然可见。我需要修改菜单。 我知道,这就是为什么我说我不认为这是一个受支持的用例。实际上,也许如果您也将高度设置为 0..【参考方案2】:我找到了解决方法,但效果不太好:
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)
【讨论】:
【参考方案3】:在早期的 Qt 快速版本中,如 Controls 1.4,您可以使用菜单对象的私有方法:__closeAndDestroy()
。
但不能保证这个私有方法。
【讨论】:
以上是关于如何在 QML 中隐藏菜单项的主要内容,如果未能解决你的问题,请参考以下文章
如何在 BottomNavigationView 中动态隐藏菜单项?