Qt 如何在QML中隐藏菜单项
我正在使用Qt Quick Controls 2并为上下文菜单编写以下代码: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"
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,则可能会发生。。