Qt 5.11 | Qt Quick Controls 2 | QML Types | Menu QML Type

Qt 5.11.3 Reference Documentation

# Menu QML Type

Menu popup that can be used as a context menu or popup menu. More...

Import Statement: | import QtQuick.Controls 2.4
Since: | Qt 5.7
Inherits: | Popup

- List of all members, including inherited members
- Obsolete members

## Properties

- cascade : bool
- contentData : list<Object>
- contentModel : model
- count : int
- currentIndex : int
- delegate : Component
- overlap : real
- title : string

## Methods

- Action actionAt(int index)
- void addAction(Action action)
- void addItem(Item item)
- void addMenu(Menu menu)
- void dismiss()
- void insertAction(int index, Action action)
- void insertItem(int index, Item item)
- void insertMenu(int index, Menu menu)
- Item itemAt(int index)
- Menu menuAt(int index)
- void moveItem(int from, int to)
- void popup(Item parent, real x, real y, MenuItem item = null)
- void popup(real x, real y, MenuItem item = null)
- void popup(Item parent, point pos, MenuItem item = null)
- void popup(point pos, MenuItem item = null)
- void popup(Item parent, MenuItem item = null)
- void popup(MenuItem item = null)
- void removeAction(Action action)
- void removeItem(Item item)
- void removeMenu(Menu menu)
- Action takeAction(int index)
- MenuItem takeItem(int index)
- Menu takeMenu(int index)

## Detailed Description

Menu has two main use cases:

- Context menus; for example, a menu that is shown after right clicking
- Popup menus; for example, a menu that is shown after clicking a button

When used as a context menu, the recommended way of opening the menu is to call popup(). Unless a position is explicitly specified, the menu is positioned at the mouse cursor on desktop platforms that have a mouse cursor available, and otherwise centered over its parent item.

      MouseArea {
          anchors.fill: parent
          acceptedButtons: Qt.LeftButton | Qt.RightButton
          onClicked: {
              if (mouse.button === Qt.RightButton)
                  contextMenu.popup()
          }
          onPressAndHold: {
              if (mouse.source === Qt.MouseEventNotSynthesized)
                  contextMenu.popup()
          }

          Menu {
              id: contextMenu
              MenuItem { text: "Cut" }
              MenuItem { text: "Copy" }
              MenuItem { text: "Paste" }
          }
      }

When used as a popup menu, it is easiest to specify the position by specifying the desired x and y coordinates using the respective properties, and call open() to open the menu.

      Button {
          id: fileButton
          text: "File"
          onClicked: menu.open()

          Menu {
              id: menu
              y: fileButton.height

              MenuItem {
                  text: "New..."
              }
              MenuItem {
                  text: "Open..."
              }
              MenuItem {
                  text: "Save"
              }
          }
      }

Since QtQuick.Controls 2.3 (Qt 5.10), it is also possible to create sub-menus and declare Action objects inside Menu:

      Menu {
          Action { text: "Cut" }
          Action { text: "Copy" }
          Action { text: "Paste" }

          MenuSeparator { }

          Menu {
              title: "Find/Replace"
              Action { text: "Find Next" }
              Action { text: "Find Previous" }
              Action { text: "Replace" }
          }
      }

Sub-menus are cascading by default on desktop platforms that have a mouse cursor available. Non-cascading menus are shown one menu at a time, and centered over the parent menu.

Typically, menu items are statically declared as children of the menu, but Menu also provides API to add, insert, move and remove items dynamically. The items in a menu can be accessed using itemAt() or contentChildren.

Although MenuItems are most commonly used with Menu, it can contain any type of item.

See also Customizing Menu, MenuItem, Menu Controls, and Popup Controls.

## Property Documentation

cascade : bool

This property holds whether the menu cascades its sub-menus.

The default value is platform-specific. Menus are cascading by default on desktop platforms that have a mouse cursor available. Non-cascading menus are shown one menu at a time, and centered over the parent menu.

Note: Changing the value of the property has no effect while the menu is open.

This property was introduced in QtQuick.Controls 2.3 (Qt 5.10).

See also overlap.

[default] contentData : list<Object>

This property holds the list of content data.

The list contains all objects that have been declared in QML as children of the menu, and also items that have been dynamically added or inserted using the addItem() and insertItem() methods, respectively.

Note: Unlike `contentChildren`, `contentData` does include non-visual QML objects. It is not re-ordered when items are inserted or moved.

See also Item::data and contentChildren.

[read-only] contentModel : model

This property holds the model used to display menu items.

The content model is provided for visualization purposes. It can be assigned as a model to a content item that presents the contents of the menu.

      Menu {
          id: menu
          contentItem: ListView {
              model: menu.contentModel
          }
      }

The model allows menu items to be statically declared as children of the menu.

[read-only] count : int

This property holds the number of items.

This property was introduced in QtQuick.Controls 2.3 (Qt 5.10).

currentIndex : int

This property holds the index of the currently highlighted item.

Menu items can be highlighted by mouse hover or keyboard navigation.

This property was introduced in QtQuick.Controls 2.3 (Qt 5.10).

See also MenuItem::highlighted.

delegate : Component

This property holds the component that is used to create items to present actions.

      Menu {
          Action { text: "Cut" }
          Action { text: "Copy" }
          Action { text: "Paste" }
      }

This property was introduced in QtQuick.Controls 2.3 (Qt 5.10).

See also Action.

overlap : real

This property holds the amount of pixels by which the menu horizontally overlaps its parent menu.

The property only has effect when the menu is used as a cascading sub-menu.

The default value is style-specific.

Note: Changing the value of the property has no effect while the menu is open.

This property was introduced in QtQuick.Controls 2.3 (Qt 5.10).

See also cascade.

title : string

This property holds the title for the menu.

The title of a menu is often displayed in the text of a menu item when the menu is a submenu, and in the text of a tool button when it is in a menubar.

## Method Documentation

Action actionAt(int index)

Returns the action at index, or `null` if the index is not valid or there is no action at the specified index.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).

void addAction(Action action)

Adds action to the end of this menu.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).

void addItem(Item item)

Adds item to the end of the list of items.

void addMenu(Menu menu)

Adds menu as a sub-menu to the end of this menu.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).

void dismiss()

Closes all menus in the hierarchy that this menu belongs to.

Note: Unlike close() that only closes a menu and its sub-menus, `dismiss()` closes the whole hierarchy of menus, including the parent menus. In practice, `close()` is suitable e.g. for implementing navigation in a hierarchy of menus, and `dismiss()` is the appropriate method for closing the whole hierarchy of menus.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).

See also popup() and Popup::close().

void insertAction(int index, Action action)

Inserts action at index. The index is within all items in the menu.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).

void insertItem(int index, Item item)

Inserts item at index.

void insertMenu(int index, Menu menu)

Inserts menu as a sub-menu at index. The index is within all items in the menu.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).

Item itemAt(int index)

Returns the item at index, or `null` if it does not exist.

Menu menuAt(int index)

Returns the sub-menu at index, or `null` if the index is not valid or there is no sub-menu at the specified index.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).

void moveItem(int from, int to)

Moves an item from one index to another.

void popup(Item parent, real x, real y, MenuItem item = null)

void popup(real x, real y, MenuItem item = null)

void popup(Item parent, point pos, MenuItem item = null)

void popup(point pos, MenuItem item = null)

void popup(Item parent, MenuItem item = null)

void popup(MenuItem item = null)

void removeAction(Action action)

Removes and destroys the specified action.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).

void removeItem(Item item)

Removes and destroys the specified item.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).

void removeMenu(Menu menu)

Removes and destroys the specified menu.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).

Action takeAction(int index)

Removes and returns the action at index. The index is within all items in the menu.

Note: The ownership of the action is transferred to the caller.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).

MenuItem takeItem(int index)

Removes and returns the item at index.

Note: The ownership of the item is transferred to the caller.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).

Menu takeMenu(int index)

Removes and returns the menu at index. The index is within all items in the menu.

Note: The ownership of the menu is transferred to the caller.

This method was introduced in QtQuick.Controls 2.3 (Qt 5.10).