我正在使用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
如何更改菜单项的可见性并正确显示菜单。感谢您的建议。
答案 0 :(得分:3)
除了隐藏项目之外,将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()
}
}
}
这是因为菜单的高度取决于内部contentHeight
的{{1}}。
答案 1 :(得分: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)
}
}
}
答案 2 :(得分:0)
在早期的Qt快速版本中,与Controls 1.4一样,您可以使用菜单对象的私有方法:__closeAndDestroy()
。
但无法保证此私有方法。