Qt QML无法在菜单中创建子菜单

Qt QML无法在菜单中创建子菜单,qt,qml,qtquick2,qtquickcontrols2,Qt,Qml,Qtquick2,Qtquickcontrols2,我正在尝试创建一个菜单 import QtQuick 2.0 import QtQuick.Controls 2.2 ... Menu { id: menu title: "mainMenu" MenuItem { text: "menuItem1" } MenuItem { text: "menuItem2" } Menu { title: "cont

我正在尝试创建一个菜单

import QtQuick 2.0
import QtQuick.Controls 2.2

...

Menu {
      id: menu
      title: "mainMenu"
      MenuItem {
         text: "menuItem1"
      }
      MenuItem {
         text: "menuItem2"
      }
      Menu {
          title: "contextMenu"
            MenuItem {
               text: "item1"
            }
            MenuItem {
               text: "item2"
            }
      }
} 
但是当我尝试
menu.open()
时,没有
contextMenu
请在下面找到一个截图


如何解决此问题?

您可能想在支持这些子菜单的地方使用
QtQuick.Controls 1.x

QtQuick.Controls 2.2
中-您使用的版本-
菜单
继承自
弹出窗口
,因此其行为类似-这意味着默认情况下,它们是关闭的,您需要将它们设置为
可见
打开()

另一方面,
MenuItem
是预配置的
AbstractButton
s,单击时关闭
弹出窗口。如果您想使用
QtQuick.Controls 2.x
-style
菜单
,您可以定义自己的子类型
子菜单
,它是一个按钮,不关闭父菜单弹出窗口
,而是根据需要打开第二个菜单,或者在单击(手风琴式)时插入右菜单项


正确的实现取决于您的需求,但不应太具挑战性。如果您在这方面需要更多帮助,请随时询问。

也许您可以使用Button而不是MenuItem,并自行调整按钮的背景,将其包装起来


Item {
    id: root
    width: 500
    height: 500

    MouseArea {
        id: mouse
        anchors.fill: parent

        onClicked: {
            rootMenu.open()
        }
    }

    Menu {
        id: rootMenu
        title: "rootMenu"

        Button {
            text: "menuItem1"
            onClicked: {
                console.log("choose A")
                rootMenu.close()
            }
        }

        Button {
            text: "menuItem2"
            onClicked: {
                console.log("choose B")
                rootMenu.close()
            }
        }

        Button {
            id: menu_c
            text: "menuItem3"
            onClicked: secondMenu.open()
        }
    }
    Menu {
        id: secondMenu
        x: rootMenu.width
        y: menu_c.y
        MenuItem {
            text: "item1"
            onTriggered: {
                console.log("item1")
                rootMenu.close();
            }
        }
        MenuItem {
            text: "item2"
            onTriggered: {
                console.log("item2")
                rootMenu.close();
            }
        }
    }
}

添加对和的支持。

您使用的是哪个Qt版本?我的Qt版本是5.9.2可能是某个特定的WM?基于Wayland、帧缓冲区或类似的东西?PS。您已经可以试用Qt 5.10 beta1,它可以方便地在在线安装程序中获得。不过,请注意,由于Qt Quick core中正在进行一些与触摸和鼠标输入处理相关的工作,第一个测试版在这方面存在一些问题。在Qt Quick Controls 2中,弹出窗口受到影响,在单击或点击外部时,弹出窗口并不总是如预期的那样关闭。这些问题已在即将发布的Qt 5.10 beta2中修复。