2017-10-18 39 views
2

創建子菜單我試圖創建一個菜單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

回答

0

也許你打算使用QtQuick.Controls 1.x其中支持這些子菜單。

QtQuick.Controls 2.2 - 你正在使用的版本 - 從PopupMenu繼承,因此行爲像這樣的 - 這意味着,它們默認是關閉的,你需要將它們設置visibleopen()他們。

另一方面,MenuItemAbstractButton,它們已預先配置,點擊時關閉Popup。如果你想使用QtQuick.Controls 2.x風格的Menu你可以定義你自己的子類型SubMenu這是一個按鈕,不會關閉父Popup,但打開第二個菜單,或點擊時插入右手MenuItem(手風琴風格) 。

正確的實施取決於您的要求,但不應該太具有挑戰性。隨意問,如果你需要更多的幫助。

0

也許你可以使用按鈕,而不是菜單項,並調整按鈕自己的背景,總結起來


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(); 
      } 
     } 
    } 
} 
1
+0

PS。您可以試用Qt 5.10 beta1,它可以在線安裝程序方便地使用。但請注意,由於Qt Quick核心中正在進行的一些觸摸和鼠標輸入處理相關工作,因此已知第一個測試版本在此領域存在一些問題。在Qt Quick Controls 2中,彈出窗口受到影響的方式是,他們在點擊或敲擊外部時並不總是按照預期關閉。這些問題已經在即將到來的Qt 5.10 beta2中得到修復。 – jpnurmi