QML不能在菜单

问题描述:

创建子菜单我试图创建一个菜单QML不能在菜单

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 请在下面找到截图。

https://i.stack.imgur.com/462NN.png

我该如何解决这个问题?

+0

你正在使用哪个Qt版本? – Mitch

+0

我的qt版本是5.9.2 –

+0

也许是一些特定的WM?基于Wayland的帧缓冲或类似的东西? – folibis

也许你打算使用QtQuick.Controls 1.x其中支持这些子菜单。

QtQuick.Controls 2.2 - 你正在使用的版本 - 从PopupMenu继承,因此行为像这样的 - 这意味着,它们默认是关闭的,你需要将它们设置visibleopen()他们。

另一方面,MenuItemAbstractButton,它们已预先配置,点击时关闭Popup。如果你想使用QtQuick.Controls 2.x风格的Menu你可以定义你自己的子类型SubMenu这是一个按钮,不会关闭父Popup,但打开第二个菜单,或点击时插入右手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(); 
      } 
     } 
    } 
} 

+0

PS。您可以试用Qt 5.10 beta1,它可以在线安装程序方便地使用。但请注意,由于Qt Quick核心中正在进行的一些触摸和鼠标输入处理相关工作,因此已知第一个测试版本在此领域存在一些问题。在Qt Quick Controls 2中,弹出窗口受到影响的方式是,他们在点击或敲击外部时并不总是按照预期关闭。这些问题已经在即将到来的Qt 5.10 beta2中得到修复。 – jpnurmi