Menu QML Type

コンテキストメニューやポップアップメニューとして使えるメニューポップアップ。詳細...

Import Statement: import QtQuick.Controls
Inherits:

Popup

プロパティ

方法

  • Action actionAt(int index) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void addAction(Action action) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void addItem(Item item)
  • void addMenu(Menu menu) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void dismiss() (since QtQuick.Controls 2.3 (Qt 5.10))
  • void insertAction(int index, Action action) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void insertItem(int index, Item item)
  • void insertMenu(int index, Menu menu) (since QtQuick.Controls 2.3 (Qt 5.10))
  • Item itemAt(int index)
  • Menu menuAt(int index) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void moveItem(int from, int to)
  • void popup(MenuItem item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void popup(Item parent, MenuItem item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void popup(point pos, MenuItem item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void popup(Item parent, point pos, MenuItem item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void popup(real x, real y, MenuItem item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void popup(Item parent, real x, real y, MenuItem item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void removeAction(Action action) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void removeItem(Item item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void removeMenu(Menu menu) (since QtQuick.Controls 2.3 (Qt 5.10))
  • Action takeAction(int index) (since QtQuick.Controls 2.3 (Qt 5.10))
  • MenuItem takeItem(int index) (since QtQuick.Controls 2.3 (Qt 5.10))
  • Menu takeMenu(int index) (since QtQuick.Controls 2.3 (Qt 5.10))

詳細

macOS ネイティブメニュー。

非ネイティブのマテリアル・スタイルのメニュー。

メニューには主に2つの使用例があります:

  • コンテキストメニュー:例えば、右クリック後に表示されるメニュー。
  • ポップアップメニュー:例えば、ボタンをクリックした後に表示されるメニュー。

コンテキスト・メニューとして使用する場合、メニューを開くにはpopup() を呼び出すことをお勧めします。位置が明示的に指定されない限り、マウス・カーソルが利用可能なデスクトップ・プラットフォームでは、メニューはマウス・カーソルの位置に置かれ、そうでない場合は親アイテムの中央に置かれます。

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" }
    }
}

ポップアップ・メニューとして使用する場合は、xy の座標をそれぞれのプロパティで指定して位置を指定し、open() を呼び出してメニューを開くのが最も簡単です。

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

    Menu {
        id: menu
        y: fileButton.height

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

ボタンがクリックされたときにメニューも閉じる必要がある場合は、Popup.CloseOnPressOutsideParent フラグを使用します:

onClicked: menu.visible = !menu.visible

Menu {
    // ...
    closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent

QtQuick.Controls 2.3 (Qt 5.10)からは、Menu.Controlsの中にサブメニューを作成し、Actionオブジェクトを宣言することもできるようになりました:

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" }
    }
}

サブメニューは、マウスカーソルが利用可能なデスクトップ・プラットフォームでは、デフォルトでcascading 。非カスケード・メニューは一度に1つのメニューが表示され、親メニューの上にセンタリングされます。

通常、メニュー項目は静的にメニューの子として宣言されますが、Menuは動的にaddinsertmoveremove 項目へのAPIも提供します。メニューの項目はitemAt() やcontentChildren を使ってアクセスすることができる。

MenuItems はMenuで最もよく使われますが、どのようなタイプの項目でも含めることができます。

余白

Popupから継承されるように、Menuはmargins をサポートします。デフォルトでは、すべてのビルトインスタイルは、メニューがウィンドウの境界内に保たれるように、Menuのマージンに0 を指定します。メニューがウィンドウの外に出るようにするには(例えば、メニューが視界に入るようにアニメーションさせるには)、margin プロパティを-1 に設定します。

メニュー項目の動的生成

Instantiator または動的オブジェクト作成で、メニュー項目を動的に作成することができます。

インスタンシエータの使用

Instantiator を使って、メニュー項目を動的に生成することができます。次のコードは、"Recent Files" サブメニューを実装する方法を示しています:

Menu {
    title: qsTr("File")

    Menu {
        id: recentFilesMenu
        title: qsTr("Recent Files")
        enabled: recentFilesInstantiator.count > 0

        Instantiator {
            id: recentFilesInstantiator
            model: settings.recentFiles
            delegate: MenuItem {
                text: settings.displayableFilePath(modelData)
                onTriggered: loadFile(modelData)
            }

            onObjectAdded: (index, object) => recentFilesMenu.insertItem(index, object)
            onObjectRemoved: (index, object) => recentFilesMenu.removeItem(object)
        }

        MenuSeparator {}

        MenuItem {
            text: qsTr("Clear Recent Files")
            onTriggered: settings.clearRecentFiles()
        }
    }
}

動的オブジェクトの作成

Qt.createComponent() を使って、QMLファイルからコンポーネントを動的に読み込むこともできます。コンポーネントの準備ができたら、createObject() メソッドを呼び出すことで、そのコンポーネントのインスタンスを生成することができます。

Row {
    anchors.centerIn: parent

    Component {
        id: menuItemComponent

        MenuItem {}
    }

    Button {
        id: button
        text: "Menu"
        onClicked: menu.open()
        Menu {
            id: menu
        }
    }

    Button {
        text: "Add item"
        onClicked: {
            onClicked: {
                let menuItem = menuItemComponent.createObject(
                    menu.contentItem, { text: qsTr("New item") })
                menu.addItem(menuItem)
            }
        }
    }
}

Qt 6.8 以降、メニューはプラットフォームによって3種類の実装があります。popupType を設定することで、どれを優先するかを選ぶことができます。これにより、メニューを別のウィンドウとして表示するか、親ウィンドウ内のアイテムとして表示するか、ネイティブメニューとして表示するかを制御できます。これらのオプションについてはhere を参照してください。

デフォルトのpopupType はスタイルによって決まります。例えば、macOS スタイルでは Popup.Native に設定されますが、Imagine スタイルでは Popup.Window が使用されます(スタイルでポップアップの種類が設定されていない場合のデフォルトです)。メニューにカスタマイズを追加し、スタイルに関係なくそれらを使用したい場合は、ポップアップタイプを明示的にPopup.Window (またはPopup.Item )に設定する必要があります。もう1つの方法は、Qt::AA_DontUseNativeMenuWindows application attribute を設定することです。これは、スタイルに関係なく、アプリケーション全体のネイティブ・コンテキスト・メニューを無効にします。

デフォルトのpopupType はスタイルによって決まります。例えばmacOSスタイルでは Popup.NativeImagineスタイルでは Popup.Window (スタイルでポップアップタイプが設定されていない場合のデフォルト)を使用します。メニューにカスタマイズを追加し、スタイルに関係なくそれらを使用したい場合は、ポップアップタイプを明示的にPopup.Window (またはPopup.Item )に設定する必要があります。

メニューが優先タイプを使用できるかどうかはプラットフォームに依存します。Popup.Item はすべてのプラットフォームでサポートされていますが、Popup.Window は通常デスクトッププラットフォームでのみサポートされています。さらに、メニューがnative menubar の中にある場合、メニューはネイティブになります。また、メニューが他のメニューの中のサブメニューである場合、親(またはルート)メニューがタイプを決定します。

ネイティブメニュー使用時の制限

popupTypePopup.Native に設定する場合、Popup.ItemPopup.Window を使用する場合と比較して、いくつかの制限と違いがあります。

APIの違い

ネイティブメニューを使用する場合、Menu APIのサブセットのみがすべてのプラットフォームでサポートされます:

さらに、ポップアップの表示(たとえばopen() やpopup() など)は、プラットフォームによってはブロッキング・コールになります。これは、メニューが再び閉じられる前に呼び出しが戻らないことを意味し、アプリケーションのロジックに影響を与える可能性があります。これは、アプリケーションが複数のプラットフォームをターゲットにしており、ネイティブメニューがサポートされていないプラットフォームで実行されることがある場合、特に考慮する必要があります。その場合、popupType はPopup.Item などにフォールバックし、open() への呼び出しはブロックされません。

MenuItem のような項目は、例えばシグナルを発することによって、対応するネイティブ・メニュー項目のクリックに反応しますが、ネイティブの対応するものに置き換えられます。

レンダリングの違い

ネイティブメニューは、プラットフォーム上で利用可能なネイティブメニューAPIを使用して実装されます。そのため、これらのメニューとそのコンテンツはQMLではなく、プラットフォームによってレンダリングされます。つまり、delegate はレンダリングに使用されません。しかし、onCompleted()のような関数はプラットフォームやpopupType に関係なく実行されるように、常にインスタンス化されます(ただし、非表示)。

対応プラットフォーム

ネイティブ・メニューは現在、以下のプラットフォームでサポートされています:

  • アンドロイド
  • iOS
  • Linux(GTK+プラットフォーム・テーマで実行する場合、スタンドアロンのコンテキスト・メニューとしてのみ利用可能)
  • macOS
  • Windows

メニューのカスタマイズ,MenuItem,メニューコントロール,ポップアップコントロール,JavaScript からの動的 QML オブジェクト作成,Popup type,[QML],popupTypeもご参照ください

プロパティ ドキュメント

cascade : bool [since QtQuick.Controls 2.3 (Qt 5.10)]

このプロパティはメニューがサブメニューをカスケードするかどうかを保持する。

デフォルト値はプラットフォーム固有です。マウスカーソルが利用可能なデスクトッププラットフォームでは、メニューはデフォルトでカスケード表示されます。カスケードされないメニューは、一度に1つのメニューが表示され、親メニューの上にセンタリングされます。

注意 :メニューが開いている間は、プロパティの値を変更しても効果はありません。

注意: このプロパティは、non-native Menu を使用している場合のみサポートされます。

このプロパティは、QtQuick.Controls 2.3 (Qt 5.10) で導入されました。

overlapも参照してください


contentData : list<QtObject> [default]

このプロパティは、コンテンツ・データのリストを保持します。

このリストには、メニューの子として QML で宣言されたすべてのオブジェクトと、それぞれaddItem() とinsertItem() メソッドを使って動的に追加または挿入されたアイテムが含まれます。

注: contentChildren とは異なり、contentData には視覚的でない QML オブジェクトも含まれます。アイテムが挿入されたり移動されたりしても、並び替えは行われません。

Item::data およびcontentChildrenも参照して ください。


contentModel : model [read-only]

このプロパティは、メニュー項目を表示するために使用されるモデルを保持する。

コンテンツモデルは視覚化のために提供される。これは、メニューの内容を提示するコンテンツアイテムにモデルとして割り当てることができる。

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

このモデルは、メニュー項目をメニューの子として静的に宣言することを可能にする。


count : int [read-only, since QtQuick.Controls 2.3 (Qt 5.10)]

このプロパティはアイテムの数を保持する。

このプロパティは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


currentIndex : int [since QtQuick.Controls 2.3 (Qt 5.10)]

このプロパティは、現在ハイライトされている項目のインデックスを保持します。

メニュー項目は、マウスホバーまたはキーボードナビゲーションによってハイライトされます。

注意: このプロパティは、non-native Menu を使用している場合のみサポートされます。

このプロパティは、QtQuick.Controls 2.3 (Qt 5.10) で導入されました。

MenuItem::highlightedも参照してください


delegate : Component [since QtQuick.Controls 2.3 (Qt 5.10)]

このプロパティは、アクションを提示するアイテムの作成に使用されるコンポーネントを保持します。

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

注: デリゲートは、non-native Menu を使用している場合にのみ表示されます。

このプロパティは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。

Actionも参照してください


focus : bool

このプロパティは、ポップアップがフォーカスを欲しているかどうかを保持します。

ポップアップが実際にフォーカスを受け取ると、activeFocustrue になります。詳細については、 Qt Quick の「 キーボードフォーカス」を参照してください。

デフォルト値はtrue です。

注意: このプロパティはnon-native Menu を使用している場合のみサポートされます。

activeFocusも参照してください


icon group

icon.cache : bool

icon.color : color

icon.height : int

icon.name : string

icon.source : url

icon.width : int

このプロパティグループは、QtQuick.Controls 6.5 で追加されました。

名前説明
名前このプロパティは、使用するアイコンの名前を保持します。

アイコンはプラットフォームテーマから読み込まれる。アイコンがテーマにある場合は、icon.source が設定されていても、常にそのアイコンを使用します。アイコンが見つからない場合は、icon.source

テーマ・アイコンの詳細については、QIcon::fromTheme()を参照のこと。

sourceこのプロパティは、使用するアイコンの名前を保持する。

アイコンは通常の画像として読み込まれます。

icon.name が設定され、有効なテーマアイコンを参照している場合、このプロパティの代わりに常にそのアイコンが使用されます。

このプロパティはアイコンの幅を保持する。

アイコンの幅がこの値を超えることはありませんが、必要に応じて縮小されます。

高さこのプロパティはアイコンの高さを保持します。

アイコンの高さがこの値を超えることはありませんが、必要に応じて縮小されます。

このプロパティはアイコンの色を保持する。

色が"transparent" に設定されていない限り、アイコンは指定された色で着色されます。

キャッシュこのプロパティは、アイコンをキャッシュするかどうかを指定します。

デフォルト値はtrueである。

詳細については、cache を参照してください。

このプロパティはQtQuick.Controls 2.13 で導入されました。

注意: このプロパティは、non-native Menu を使用している場合のみサポートされます。

AbstractButton::textAbstractButton::display 、および Qt Quick Controls のアイコンも参照してください


overlap : real [since QtQuick.Controls 2.3 (Qt 5.10)]

このプロパティは、メニューがその親メニューに水平に重なるピクセル量を保持する。

このプロパティはメニューがカスケードサブメニューとして使用される時のみ効果を持つ。

デフォルト値はスタイル固有である。

注意 :メニューが開いている間、プロパティの値を変更しても効果はない。

注意: このプロパティは、non-native Menu を使用している場合のみサポートされます。

このプロパティは、QtQuick.Controls 2.3 (Qt 5.10) で導入されました。

cascadeも参照してください


title : string

このプロパティは、メニューのタイトルを保持します。

メニューのタイトルは、メニューがサブメニューの場合はメニュー項目のテキストに、メニューバーの場合はツールボタンのテキストに表示されます。


メソッド・ドキュメント

マウスカーソルが利用可能なデスクトッププラットフォームではマウスカーソルの位置にメニューを開き、そうでない場合はparent アイテムの上にメニューをセンタリングする。

メニューはオプションで特定のメニューitem に合わせることができる。current. item が指定されない場合、currentIndex-1 に設定されます。

この QML メソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。

Popup::open()も参照してください


メ ニ ュ ーを、 popups 座標系内の指定 し た位置pos に、 すなわちその項目parent に対す る 相対座標に、 開きます。

メ ニ ュ ーはオプシ ョ ンで特定のメ ニ ュ ーitem に整列 さ せる こ と も で き ます。current. item が指定されていない場合、currentIndex-1 に設定されます。

この QML メソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。

Popup::open()も参照してください


メ ニ ュ ーを、 popups 座標系における指定位置x,y に、 すなわちそのparent 項目に対する相対座標に、 開きます。

メ ニ ュ ーはオプシ ョ ンで特定のメ ニ ュ ーitem に整列 さ せる こ と も で き ます。current. item が指定されていない場合、currentIndex-1 に設定されます。

この QML メソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。

dismiss() およびPopup::open()も参照してください


[since QtQuick.Controls 2.3 (Qt 5.10)] Action actionAt(int index)

index にあるアクションを返します。インデックスが有効でないか、指定したインデックスにアクションがない場合はnull を返します。

このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


[since QtQuick.Controls 2.3 (Qt 5.10)] void addAction(Action action)

action をメニューの最後に追加します。

このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


void addItem(Item item)

項目リストの最後にitem を追加します。


[since QtQuick.Controls 2.3 (Qt 5.10)] void addMenu(Menu menu)

menu をサブメニューとしてメニューの最後に追加します。

このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


[since QtQuick.Controls 2.3 (Qt 5.10)] void dismiss()

このメニューが属する階層のすべてのメニューを閉じる。

注意: close() がメニューとそのサブメニューのみを閉じるのとは異なり (non-native menus を使用した場合)、dismiss() は親メニューを含むメニューの階層全体を閉じます。実際には、close() はメニューの階層でナビゲーションを実装する場合などに適しており、dismiss() はメニューの階層全体を閉じるのに適したメソッドです。

このメソッドはQtQuick.Controls 2.3 (Qt 5.10)で導入されました。

popup() およびPopup::close()も参照してください


[since QtQuick.Controls 2.3 (Qt 5.10)] void insertAction(int index, Action action)

indexaction を挿入する。インデックスはメニューの全項目内にあります。

このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


void insertItem(int index, Item item)

indexitem を挿入します。


[since QtQuick.Controls 2.3 (Qt 5.10)] void insertMenu(int index, Menu menu)

index にサブメニューとしてmenu を挿入する。インデックスはメニューの全項目内にあります。

このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


Item itemAt(int index)

index にあるアイテムを返します。存在しない場合はnull を返します。


index にあるサブメニューを返します。インデックスが有効でないか、指定したインデックスにサブメニューがない場合はnull を返します。

このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


void moveItem(int from, int to)

アイテムfrom のインデックスto を別のインデックスに移動します。


[since QtQuick.Controls 2.3 (Qt 5.10)] void removeAction(Action action)

指定されたaction を削除・破棄します。

このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


[since QtQuick.Controls 2.3 (Qt 5.10)] void removeItem(Item item)

指定されたitem を削除・破棄します。

このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


[since QtQuick.Controls 2.3 (Qt 5.10)] void removeMenu(Menu menu)

指定されたmenu を削除・破棄します。

このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


[since QtQuick.Controls 2.3 (Qt 5.10)] Action takeAction(int index)

index のアクションを削除して返す。インデックスはメニューのすべての項目内にある。

注意: アクションの所有権は呼び出し元に移ります。

このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


[since QtQuick.Controls 2.3 (Qt 5.10)] MenuItem takeItem(int index)

index にあるアイテムを削除して返す。

注意: アイテムの所有権は呼び出し元に移ります。

このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


[since QtQuick.Controls 2.3 (Qt 5.10)] Menu takeMenu(int index)

index にあるメニューを削除して返す。インデックスはメニューの全項目内にある。

注意: メニューの所有権は呼び出し元に移ります。

このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。


© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.