Menu QML Type
コンテキストメニューやポップアップメニューとして使えるメニューポップアップ。詳細...
Import Statement: | import QtQuick.Controls |
Inherits: |
プロパティ
- cascade : bool
(since QtQuick.Controls 2.3 (Qt 5.10))
- contentData : list<QtObject>
- contentModel : model
- count : int
(since QtQuick.Controls 2.3 (Qt 5.10))
- currentIndex : int
(since QtQuick.Controls 2.3 (Qt 5.10))
- delegate : Component
(since QtQuick.Controls 2.3 (Qt 5.10))
- focus : bool
- icon
- icon.cache : bool
- icon.color : color
- icon.height : int
- icon.name : string
- icon.source : url
- icon.width : int
- overlap : real
(since QtQuick.Controls 2.3 (Qt 5.10))
- title : string
方法
- 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" } } }
ポップアップ・メニューとして使用する場合は、x とy の座標をそれぞれのプロパティで指定して位置を指定し、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は動的にadd 、insert 、move 、remove 項目への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.Native
、Imagineスタイルでは Popup.Window
(スタイルでポップアップタイプが設定されていない場合のデフォルト)を使用します。メニューにカスタマイズを追加し、スタイルに関係なくそれらを使用したい場合は、ポップアップタイプを明示的にPopup.Window
(またはPopup.Item
)に設定する必要があります。
メニューが優先タイプを使用できるかどうかはプラットフォームに依存します。Popup.Item
はすべてのプラットフォームでサポートされていますが、Popup.Window
は通常デスクトッププラットフォームでのみサポートされています。さらに、メニューがnative menubar の中にある場合、メニューはネイティブになります。また、メニューが他のメニューの中のサブメニューである場合、親(またはルート)メニューがタイプを決定します。
ネイティブメニュー使用時の制限
popupType をPopup.Native
に設定する場合、Popup.Item
とPopup.Window
を使用する場合と比較して、いくつかの制限と違いがあります。
APIの違い
ネイティブメニューを使用する場合、Menu APIのサブセットのみがすべてのプラットフォームでサポートされます:
- x
- y
- visible
- opened
- title
- count
- contentData
- contentChildren (ビジュアルチルドレンは表示されません)
- contentModel
- open()
- popup()
- close()
- opened()
- closed()
- aboutToShow()
- aboutToHide()
さらに、ポップアップの表示(たとえば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 |
このプロパティはメニューがサブメニューをカスケードするかどうかを保持する。
デフォルト値はプラットフォーム固有です。マウスカーソルが利用可能なデスクトッププラットフォームでは、メニューはデフォルトでカスケード表示されます。カスケードされないメニューは、一度に1つのメニューが表示され、親メニューの上にセンタリングされます。
注意 :メニューが開いている間は、プロパティの値を変更しても効果はありません。
注意: このプロパティは、non-native Menu を使用している場合のみサポートされます。
このプロパティは、QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
overlapも参照してください 。
このプロパティは、コンテンツ・データのリストを保持します。
このリストには、メニューの子として QML で宣言されたすべてのオブジェクトと、それぞれaddItem() とinsertItem() メソッドを使って動的に追加または挿入されたアイテムが含まれます。
注: contentChildren
とは異なり、contentData
には視覚的でない QML オブジェクトも含まれます。アイテムが挿入されたり移動されたりしても、並び替えは行われません。
Item::data およびcontentChildrenも参照して ください。
contentModel : model |
このプロパティは、メニュー項目を表示するために使用されるモデルを保持する。
コンテンツモデルは視覚化のために提供される。これは、メニューの内容を提示するコンテンツアイテムにモデルとして割り当てることができる。
Menu { id: menu contentItem: ListView { model: menu.contentModel } }
このモデルは、メニュー項目をメニューの子として静的に宣言することを可能にする。
count : int |
このプロパティはアイテムの数を保持する。
このプロパティは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
currentIndex : int |
このプロパティは、現在ハイライトされている項目のインデックスを保持します。
メニュー項目は、マウスホバーまたはキーボードナビゲーションによってハイライトされます。
注意: このプロパティは、non-native Menu を使用している場合のみサポートされます。
このプロパティは、QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
MenuItem::highlightedも参照してください 。
delegate : Component |
focus : bool |
このプロパティは、ポップアップがフォーカスを欲しているかどうかを保持します。
ポップアップが実際にフォーカスを受け取ると、activeFocus はtrue
になります。詳細については、 Qt Quick の「 キーボードフォーカス」を参照してください。
デフォルト値はtrue
です。
注意: このプロパティはnon-native Menu を使用している場合のみサポートされます。
activeFocusも参照してください 。
このプロパティグループは、QtQuick.Controls 6.5 で追加されました。
名前 | 説明 |
---|---|
名前 | このプロパティは、使用するアイコンの名前を保持します。 アイコンはプラットフォームテーマから読み込まれる。アイコンがテーマにある場合は、icon.source が設定されていても、常にそのアイコンを使用します。アイコンが見つからない場合は、icon.source 。 テーマ・アイコンの詳細については、QIcon::fromTheme()を参照のこと。 |
source | このプロパティは、使用するアイコンの名前を保持する。 アイコンは通常の画像として読み込まれます。 icon.name が設定され、有効なテーマアイコンを参照している場合、このプロパティの代わりに常にそのアイコンが使用されます。 |
幅 | このプロパティはアイコンの幅を保持する。 アイコンの幅がこの値を超えることはありませんが、必要に応じて縮小されます。 |
高さ | このプロパティはアイコンの高さを保持します。 アイコンの高さがこの値を超えることはありませんが、必要に応じて縮小されます。 |
色 | このプロパティはアイコンの色を保持する。 色が |
キャッシュ | このプロパティは、アイコンをキャッシュするかどうかを指定します。 デフォルト値はtrueである。 詳細については、cache を参照してください。 このプロパティはQtQuick.Controls 2.13 で導入されました。 |
注意: このプロパティは、non-native Menu を使用している場合のみサポートされます。
AbstractButton::text 、AbstractButton::display 、および Qt Quick Controls のアイコンも参照してください 。
overlap : real |
このプロパティは、メニューがその親メニューに水平に重なるピクセル量を保持する。
このプロパティはメニューがカスケードサブメニューとして使用される時のみ効果を持つ。
デフォルト値はスタイル固有である。
注意 :メニューが開いている間、プロパティの値を変更しても効果はない。
注意: このプロパティは、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()も参照してください 。
index にあるアクションを返します。インデックスが有効でないか、指定したインデックスにアクションがない場合はnull
を返します。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
|
action をメニューの最後に追加します。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
void addItem(Item item) |
項目リストの最後にitem を追加します。
|
menu をサブメニューとしてメニューの最後に追加します。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
|
このメニューが属する階層のすべてのメニューを閉じる。
注意: close() がメニューとそのサブメニューのみを閉じるのとは異なり (non-native menus を使用した場合)、dismiss()
は親メニューを含むメニューの階層全体を閉じます。実際には、close()
はメニューの階層でナビゲーションを実装する場合などに適しており、dismiss()
はメニューの階層全体を閉じるのに適したメソッドです。
このメソッドはQtQuick.Controls 2.3 (Qt 5.10)で導入されました。
popup() およびPopup::close()も参照してください 。
index にaction を挿入する。インデックスはメニューの全項目内にあります。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
index にサブメニューとしてmenu を挿入する。インデックスはメニューの全項目内にあります。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
index にあるサブメニューを返します。インデックスが有効でないか、指定したインデックスにサブメニューがない場合はnull
を返します。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
|
指定されたaction を削除・破棄します。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
|
指定されたitem を削除・破棄します。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
|
指定されたmenu を削除・破棄します。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
index のアクションを削除して返す。インデックスはメニューのすべての項目内にある。
注意: アクションの所有権は呼び出し元に移ります。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
index にあるアイテムを削除して返す。
注意: アイテムの所有権は呼び出し元に移ります。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
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.