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
(since QtQuick.Controls 6.5)- icon.cache : bool
(since QtQuick.Controls 6.5) - icon.color : color
(since QtQuick.Controls 6.5) - icon.height : int
(since QtQuick.Controls 6.5) - icon.name : string
(since QtQuick.Controls 6.5) - icon.source : url
(since QtQuick.Controls 6.5) - icon.width : int
(since QtQuick.Controls 6.5)
- icon.cache : bool
- 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つの使用例があります:
- コンテキストメニュー:例えば、右クリックした後に表示されるメニュー。
- ポップアップメニュー:例えば、ボタンをクリックした後に表示されるメニュー。
コンテキストメニューについては、Context Menus を参照してください。
ポップアップ・メニューとして使用する場合は、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 { id: menu // ... closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
Menuの中にサブメニューを作成し、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 で最もよく使われますが、どのようなタイプの項目でも含めることができます。
コンテキスト・メニュー
コンテキスト・メニューには、ContextMenu のアタッチド・タイプを使うのが簡単です。このタイプは、プラットフォーム固有のイベントに応じてメニューを作成します。また、TextField 、TextArea 、SpinBox 、DoubleSpinBox などのテキスト編集コントロールは、デフォルトで独自のコンテキストメニューを提供します。
ContextMenu を使用しない場合は、popup() を呼び出すことで、メニューを開くことが推奨される。位置が明示的に指定されない限り、マウス・カーソルが利用可能なデスクトップ・プラットフォームでは、メニューはマウス・カーソルの位置に配置され、そうでない場合は親アイテムの中央に配置されます:
TapHandler { acceptedButtons: Qt.RightButton onPressedChanged: { if (pressed && Application.styleHints.contextMenuTrigger === Qt.ContextMenuTrigger.Press) contextMenu.popup() } onTapped: { if (Application.styleHints.contextMenuTrigger === Qt.ContextMenuTrigger.Release) contextMenu.popup() } } TapHandler { acceptedDevices: PointerDevice.TouchScreen onLongPressed: contextMenu.popup() } Menu { id: contextMenu MenuItem { text: qsTr("Do stuff") } MenuItem { text: qsTr("Do more stuff") } }
テキスト編集コントロール用に独自のコンテキスト・メニューを実装する場合、iOSとAndroidには独自のネイティブ・コンテキスト・メニューがあるため、デスクトップ・プラットフォームでのみ表示する必要があることに注意してください:
TextArea { text: qsTr("TextArea") // Disable the built-in context menu (since Qt 6.9). ContextMenu.menu: null TapHandler { acceptedButtons: Qt.RightButton onPressedChanged: { if (pressed === (Application.styleHints.contextMenuTrigger === Qt.ContextMenuTrigger.Press)) contextMenu.popup() } } } Menu { id: contextMenu MenuItem { text: qsTr("Cut") // ... } MenuItem { text: qsTr("Copy") // ... } MenuItem { text: qsTr("Paste") // ... } }
マージン
Popupから継承されているため、Menuはmargins をサポートしています。デフォルトでは、すべてのビルトインスタイルは、メニューがウィンドウの境界内に保たれるように、Menuのマージンに0 。メニューがウィンドウの外に出るようにするには(例えば、メニューが視界に入るようにアニメーションさせるには)、margin プロパティを-1 に設定します。
メニュー項目の動的生成
メニュー項目を動的に作成するには、Instantiator または動的オブジェクト作成を使用します。
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 を設定することです。これにより、スタイルに関係なく、アプリケーション全体のネイティブ・コンテキスト・メニューが無効になります。
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 [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]
このプロパティは、メニュー項目を表示するために使用されるモデルを保持する。
コンテンツモデルは視覚化のために提供される。メニューの内容を表示するコンテンツアイテムにモデルとして割り当てることができる。
このモデルは、メニュー項目をメニューの子として静的に宣言することを可能にする。
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)]
このプロパティは、アクションを提示するアイテムの作成に使用されるコンポーネントを保持する。
注: デリゲートは、non-native Menu を使用しているときのみ表示されます。
Menu はデリゲートの所有権を持ちません。
このプロパティは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
Actionも参照してください 。
focus : bool
このプロパティは、ポップアップがフォーカスを欲しているかどうかを保持する。
ポップアップが実際にフォーカスを受け取ると、activeFocus はtrue になります。詳細については、 Qt Quick のキーボード・フォーカスを参照してください。
デフォルト値はtrue です。
注意: このプロパティはnon-native Menu を使用している場合のみサポートされます。
activeFocusも参照してください 。
icon group
icon.cache : bool [since QtQuick.Controls 6.5]
icon.color : color [since QtQuick.Controls 6.5]
icon.height : int [since QtQuick.Controls 6.5]
icon.name : string [since QtQuick.Controls 6.5]
icon.source : url [since QtQuick.Controls 6.5]
icon.width : int [since QtQuick.Controls 6.5]
| 名称 | 名称 |
|---|---|
| 名前 | このプロパティは、使用するアイコンの名前を保持します。 アイコンはプラットフォームテーマから読み込まれる。アイコンがテーマにある場合は、icon.source が設定されていても、常にそのアイコンを使用します。アイコンが見つからない場合は、icon.source 。 テーマ・アイコンの詳細については、QIcon::fromTheme()を参照のこと。 |
| ソース | このプロパティは、使用するアイコンの名前を保持します。 アイコンは通常の画像として読み込まれます。 icon.name が設定され、有効なテーマアイコンを参照している場合、このプロパティの代わりに常にそのアイコンが使用されます。 |
| 幅 | このプロパティはアイコンの幅を保持する。 アイコンの幅がこの値を超えることはありませんが、必要に応じて縮小されます。 |
| 高さ | このプロパティはアイコンの高さを保持します。 アイコンの高さがこの値を超えることはありませんが、必要に応じて縮小されます。 |
| 色 | このプロパティはアイコンの色を保持する。 色が |
| キャッシュ | このプロパティは、アイコンをキャッシュするかどうかを指定します。 デフォルト値はtrueである。 詳細については、cache を参照してください。 このプロパティはQtQuick.Controls 2.13 で導入されました。 |
注意: このプロパティは、non-native Menu を使用している場合のみサポートされます。
これらのプロパティは QtQuick.Controls 6.5 で導入されました。
AbstractButton::text 、AbstractButton::display 、および Qt Quick Controls の Iconsも参照してください 。
overlap : real [since QtQuick.Controls 2.3 (Qt 5.10)]
このプロパティは、メニューがその親メニューと水平方向に重なるピクセル量を保持する。
このプロパティは、メニューがカスケードサブメニューとして使用される場合にのみ効果を持つ。
デフォルト値はスタイル固有である。
注意 :メニューが開いている間、プロパティの値を変更しても効果はない。
注意: このプロパティは、non-native Menu を使用している場合のみサポートされます。
このプロパティは、QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
cascadeも参照してください 。
title : string
このプロパティはメニューのタイトルを保持する。
メニューのタイトルは、メニューがサブメニューの場合はメニュー項目のテキストに、メニューバーの場合はツールボタンのテキストに表示されることが多い。
メソッドのドキュメント
[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 を追加する。メニューは新しく追加されたaction の所有権を持ちません。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
void addItem(Item item)
項目リストの最後にitem を追加する。メニューは新しく追加されたitem の所有権を持ちません。
Dynamically Generating Menu Itemsも参照してください 。
[since QtQuick.Controls 2.3 (Qt 5.10)] void addMenu(Menu 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)
index にaction を挿入する。インデックスはメニューの全項目内にある。メニューは新しく挿入されたaction の所有権を持ちません。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
void insertItem(int index, Item item)
index にitem を挿入する。メニューは新しく挿入されたitem の所有権を持たない。
Dynamically Generating Menu Itemsも参照 。
[since QtQuick.Controls 2.3 (Qt 5.10)] void insertMenu(int index, Menu menu)
index にサブメニューとしてmenu を挿入する。インデックスはメニューのすべての項目の中にある。メニューは新しく挿入されたmenu の所有権を持ちません。
このメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
Item itemAt(int index)
アイテムが存在しない場合、index 、またはnull にアイテムを返す。
[since QtQuick.Controls 2.3 (Qt 5.10)] Menu menuAt(int index)
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 popup(MenuItem item = null)
[since QtQuick.Controls 2.3 (Qt 5.10)] void popup(Item parent, MenuItem item = null)
マウスカーソルが利用可能なデスクトッププラットフォームではマウスカーソルの位置にメニューを開き、そうでない場合はparent アイテムの上にメニューをセンタリングする。
メニューはオプションで特定のメニューitem に合わせることができる。current. item が指定されない場合、currentIndex は-1 に設定されます。
これらのメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
Popup::open()も参照してください 。
[since QtQuick.Controls 2.3 (Qt 5.10)] void popup(point pos, MenuItem item = null)
[since QtQuick.Controls 2.3 (Qt 5.10)] void popup(Item parent, point pos, MenuItem item = null)
メ ニ ュ ーを、 popups 座標系内の指定 し た位置pos に、 すなわちその項目parent に対す る 相対座標に、 開きます。
メ ニ ュ ーはオプシ ョ ンで特定のメ ニ ュ ーitem に整列 さ せる こ と も で き ます。current. item が指定されていない場合、currentIndex は-1 に設定されます。
これらのメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
Popup::open()も参照してください 。
[since QtQuick.Controls 2.3 (Qt 5.10)] void popup(real x, real y, MenuItem item = null)
[since QtQuick.Controls 2.3 (Qt 5.10)] void popup(Item parent, real x, real y, MenuItem item = null)
メ ニ ュ ーを、 popups 座標系における指定位置x,y に、 すなわちそのparent 項目に対する相対座標に、 開きます。
メ ニ ュ ーはオプシ ョ ンで特定のメ ニ ュ ーitem に整列 さ せる こ と も で き ます。current. item が指定されていない場合、currentIndex は-1 に設定されます。
これらのメソッドは QtQuick.Controls 2.3 (Qt 5.10) で導入されました。
dismiss() およびPopup::open()も参照してください 。
[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) で導入されました。
© 2026 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.

