このページでは

QMenuBar Class

QMenuBar クラスは、水平方向のメニューバーを提供します。詳細...

ヘッダー: #include <QMenuBar>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
継承元: QWidget

プロパティ

パブリック関数

QMenuBar(QWidget *parent = nullptr)
virtual ~QMenuBar()
QAction *actionAt(const QPoint &pt) const
QRect actionGeometry(QAction *act) const
QAction *activeAction() const
QAction *addMenu(QMenu *menu)
QMenu *addMenu(const QString &title)
QMenu *addMenu(const QIcon &icon, const QString &title)
QAction *addSeparator()
void clear()
QWidget *cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const
QAction *insertMenu(QAction *before, QMenu *menu)
QAction *insertSeparator(QAction *before)
bool isDefaultUp() const
bool isNativeMenuBar() const
void setActiveAction(QAction *act)
void setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopRightCorner)
void setDefaultUp(bool)
void setNativeMenuBar(bool nativeMenuBar)
NSMenu *toNSMenu()

再実装されたパブリック関数

virtual int heightForWidth(int) const override
virtual QSize minimumSizeHint() const override
virtual QSize sizeHint() const override

パブリックスロット

virtual void setVisible(bool visible) override

シグナル

void hovered(QAction *action)
void triggered(QAction *action)

protected関数

virtual void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const

再実装されたプロテクト関数

virtual void actionEvent(QActionEvent *e) override
virtual void changeEvent(QEvent *e) override
virtual bool event(QEvent *e) override
virtual bool eventFilter(QObject *object, QEvent *event) override
virtual void focusInEvent(QFocusEvent *) override
virtual void focusOutEvent(QFocusEvent *) override
virtual void keyPressEvent(QKeyEvent *e) override
virtual void leaveEvent(QEvent *) override
virtual void mouseMoveEvent(QMouseEvent *e) override
virtual void mousePressEvent(QMouseEvent *e) override
virtual void mouseReleaseEvent(QMouseEvent *e) override
virtual void paintEvent(QPaintEvent *e) override
virtual void resizeEvent(QResizeEvent *) override
virtual void timerEvent(QTimerEvent *e) override

詳細な説明

メニューバーは、プルダウンメニュー項目のリストで構成されています。メニュー項目は、addMenu() を使用して追加します。例えば、menubar が QMenuBar へのポインタであり、fileMenu がQMenu へのポインタであると仮定すると、次の文によってメニューがメニューバーに挿入されます。

menubar->addMenu(fileMenu);

メニュー項目のテキストに含まれるアンパサンドは、このメニューのショートカットとして Alt+F を設定します。(メニューバーに実際のアンパサンドを表示するには、「&&」を使用できます。)

メニューバーのレイアウトを設定する必要はありません。メニューバーは自動的に、親ウィジェットの上部に自身のジオメトリを設定し、親ウィジェットのサイズが変更されるたびに適切にジオメトリを変更します。

使用方法

ほとんどのメインウィンドウ形式のアプリケーションでは、QMainWindow で提供されているmenuBar()関数を使用し、メニューバーにQMenuを追加し、ポップアップメニューにQActionを追加します。

例(「Menus」サンプルより):

    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(newAct);

メニュー項目は、removeAction() を使用して削除できます。

ウィジェットは、QWidgetAction クラスのインスタンスを使用して保持することで、メニューに追加できます。これらのアクションは、通常の方法でメニューに挿入できます。詳細については、QMenu のドキュメントを参照してください。

プラットフォームに依存する外観と操作感

プラットフォームによって、メニューバーの外観や、ユーザーが操作した際の挙動に対する要件は異なります。たとえば、Windows システムでは、メニューバーの項目に対するキーボードショートカットを示す下線付きの文字(ニーモニック)が、Alt キーが押されたときにのみ表示されるように設定されていることがよくあります。

グローバルメニューバーとしての QMenuBar

macOS や、Ubuntu Unity などの特定の Linux デスクトップ環境では、QMenuBar はシステム全体のメニューバーを使用するためのラッパーとして機能します。1 つのダイアログ内に複数のメニューバーがある場合、最外側のメニューバー(通常は widget フラグQt::Window が設定されたウィジェット内)がシステム全体のメニューバーとして使用されます。

また、macOS 向けの Qt には、QMenuBar を macOS の一般的なメニューバーレイアウトにより密接に適合させるためのメニューバー統合機能も提供されています。エントリが移動された場合でも、そのスロットは元の位置にあったかのように引き続き発火します。

この統合機能は、メニュー項目の `QAction::menuRole()` に基づいています。項目に `QAction::TextHeuristicRole` が設定されている場合、タイトルとの文字列一致に基づいて、以下のヒューリスティックに従って役割が決定されます:

文字列の一致配置備考
about.*アプリケーションメニュー | <アプリケーション名>についてアプリケーション名は、Info.plist ファイルから取得されます(以下の注を参照)。このエントリが見つからない場合、アプリケーションメニューに「About」項目は表示されません。
config、options、setup、settings、またはpreferencesアプリケーションメニュー | 環境設定このエントリが見つからない場合、「設定」項目は無効になります
quit または exitアプリケーションメニュー | <アプリケーション名>を終了この項目が見つからない場合、QCoreApplication::quit() を呼び出すためのデフォルトの「終了」項目が作成されます

QAction::menuRole() プロパティをQAction::NoRole に設定することで、この動作を上書きできます。

Mac アプリケーション内のすべてのウィンドウで 1 つのメニューバーを共有したい場合は、親を持たないメニューバーを作成する必要があります。親を持たないメニューバーは、以下の方法で作成します。

QMenuBar *menuBar = new QMenuBar(nullptr);

注:共有メニューバーを作成する際に `QMainWindow::menuBar()`を呼び出さないでください。そうすると、そのメニューバーの親が `QMainWindow ` になってしまいます。そのメニューバーは、親である `QMainWindow` に対してのみ表示されることになります。

注:macOS メニューバーのアプリケーション名に使用されるテキストは、アプリケーションのバンドル内にある `Info.plist ` ファイルに設定された値から取得されます。詳細については、『Qt for macOS - デプロイメント』を参照してください。

注:Linux では、Qt D-Bus セッションバス上で com.canonical.AppMenu.Registrar サービスが利用可能な場合、前述のように Qt はこのサービスと通信して、アプリケーションのメニューをグローバルメニューバーにインストールします。

例

「Menus」の例では、QMenuBar およびQMenu の使用方法を示しています。その他のメインウィンドウアプリケーションの例でも、これらのクラスを使用してメニューを提供しています。

関連項目: QMenu 、QShortcut 、QAction 、「Apple Human Interface Guidelines」の概要、および「Menus」の例。

プロパティのドキュメント

defaultUp : bool

このプロパティはポップアップの向きを指定します

デフォルトのポップアップ方向。デフォルトでは、メニューは画面の「下」にポップアップします。このプロパティを true に設定すると、メニューは「上」にポップアップします。参照対象のドキュメントの下にあるメニューに対して、この設定を行うことがあります。

メニューが画面に収まらない場合は、自動的に反対方向が表示されます。

アクセス関数:

bool isDefaultUp() const
void setDefaultUp(bool)

nativeMenuBar : bool

このプロパティは、メニューバーをサポートしているプラットフォームにおいて、メニューバーをネイティブメニューバーとして使用するかどうかを指定します

このプロパティは、ネイティブメニューバーをサポートしているプラットフォームにおいて、メニューバーをネイティブメニューバーとして使用するかどうかを指定します。現在サポートされているプラットフォームは、macOS、および com.canonical.dbusmenu D-Bus インターフェースを使用する Linux デスクトップ(Ubuntu Unity など)です。 このプロパティが `true` の場合、メニューバーはネイティブメニューバーとして使用され、親ウィンドウ内には表示されません。`false ` の場合、メニューバーはウィンドウ内に残ります。その他のプラットフォームでは、このプロパティを設定しても効果はなく、読み取った場合は常に `false` が返されます。

デフォルトでは、アプリケーションに対してQt::AA_DontUseNativeMenuBar 属性が設定されているかどうかに従います。このプロパティを明示的に設定すると、その属性の有無にかかわらず、設定された値が優先されます。

アクセス関数:

bool isNativeMenuBar() const
void setNativeMenuBar(bool nativeMenuBar)

メンバ関数のドキュメント

[explicit] QMenuBar::QMenuBar(QWidget *parent = nullptr)

親がparent であるメニューバーを作成します。

[virtual noexcept] QMenuBar::~QMenuBar()

メニューバーを非表示にします。

QAction *QMenuBar::actionAt(const QPoint &pt) const

pt にある「QAction 」を返します。pt にアクションが存在しない場合、またはその場所に区切り文字が含まれている場合は、nullptr を返します。

QWidget::addAction() およびaddSeparator()も参照してください 。

[override virtual protected] void QMenuBar::actionEvent(QActionEvent *e)

QWidget::actionEvent(QActionEvent *event) を再実装します。

QRect QMenuBar::actionGeometry(QAction *act) const

アクション `act ` のジオメトリを `QRect` として返します。

actionAt()も参照してください 。

QAction *QMenuBar::activeAction() const

現在ハイライトされているQAction が存在する場合はそれを返し、存在しない場合はnullptr を返します。

setActiveAction()も参照してください 。

QAction *QMenuBar::addMenu(QMenu *menu)

メニューバーに「menu 」を追加します。メニューの menuAction() を返します。メニューバーは、このメニューの所有権を取得しません。

注: 返されるQAction オブジェクト を使用して、対応するメニューを非表示にすることができます。

関連項目: QWidget::addAction() およびQMenu::menuAction()。

QMenu *QMenuBar::addMenu(const QString &title)

title を持つ新しい「QMenu 」をメニューバーに追加します。メニューバーがこのメニューの所有権を取得します。新しいメニューを返します。

QWidget::addAction() およびQMenu::menuAction()も参照してください 。

QMenu *QMenuBar::addMenu(const QIcon &icon, const QString &title)

icon およびtitle を含む新しい「QMenu 」をメニューバーに追加します。メニューバーがこのメニューの所有権を取得します。新しいメニューを返します。

QWidget::addAction() およびQMenu::menuAction()も参照してください 。

QAction *QMenuBar::addSeparator()

メニューに区切り文字を追加します。

[override virtual protected] void QMenuBar::changeEvent(QEvent *e)

QWidget::changeEvent(QEvent *event) を再実装します。

void QMenuBar::clear()

メニューバーからすべてのアクションを削除します。

注:macOSでは 、システムメニューバーに統合されたメニュー項目は、この関数では削除されません。これに対処する方法の一つとして、余分なアクションを手動で削除することが挙げられます。各メニューのmenu role を設定することで、どのメニュー項目が統合され、どの項目が統合されないかを事前に把握できます。その後、どの項目を再作成し、どの項目を削除するかを判断してください。

removeAction()も参照してください 。

QWidget *QMenuBar::cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const

corner の設定に応じて、最初のメニュー項目の左側にあるウィジェット、または最後のメニュー項目の右側にあるウィジェットを返します。

注: `Qt::TopRightCorner ` または `Qt::TopLeftCorner ` 以外のコーナーを指定すると 、警告が表示されます。

setCornerWidget()も参照してください 。

[override virtual protected] bool QMenuBar::event(QEvent *e)

QWidget::event(QEvent *event) を再実装します。

[override virtual protected] bool QMenuBar::eventFilter(QObject *object, QEvent *event)

QObject::eventFilter(QObject *watched, QEvent *event) を再実装します。

[override virtual protected] void QMenuBar::focusInEvent(QFocusEvent *)

QWidget::focusInEvent(QFocusEvent *event) を再実装します。

[override virtual protected] void QMenuBar::focusOutEvent(QFocusEvent *)

QWidget::focusOutEvent(QFocusEvent *event) を再実装しています。

[override virtual] int QMenuBar::heightForWidth(int) const

QWidget::heightForWidth(int w) const を再実装します。

[signal] void QMenuBar::hovered(QAction *action)

このシグナルは、メニューアクションがハイライトされたときに発信されます。action は、このイベントの送信を引き起こしたアクションです。

多くの場合、これはステータス情報を更新するために使用されます。

triggered() およびQAction::hovered()も参照してください 。

[virtual protected] void QMenuBar::initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const

option を、メニューバーの値とaction の情報を使って初期化します。この方法は、サブクラスがQStyleOptionMenuItem が必要であるものの、すべての情報を自分で入力したくない場合に役立ちます。

QStyleOption::initFrom() およびQMenu::initStyleOption()も参照してください 。

QAction *QMenuBar::insertMenu(QAction *before, QMenu *menu)

この便利関数は、アクション `before ` の前に `menu ` を挿入し、メニュー `menuAction()` を返します。

QWidget::insertAction() およびaddMenu()も参照してください 。

QAction *QMenuBar::insertSeparator(QAction *before)

この便利関数は、新しいセパレータアクション、すなわちQAction::isSeparator()がtrueを返すアクションを作成します。この関数は、新しく作成されたアクションを、このメニューバーのアクション一覧の「before 」アクションの前に挿入し、それを返します。

QWidget::insertAction() およびaddSeparator()も参照してください 。

[override virtual protected] void QMenuBar::keyPressEvent(QKeyEvent *e)

QWidget::keyPressEvent(QKeyEvent *event) を再実装します。

[override virtual protected] void QMenuBar::leaveEvent(QEvent *)

QWidget::leaveEvent(QEvent *event) を再実装します。

[override virtual] QSize QMenuBar::minimumSizeHint() const

プロパティ `QWidget::minimumSizeHint` のアクセス関数を再実装します。

[override virtual protected] void QMenuBar::mouseMoveEvent(QMouseEvent *e)

QWidget::mouseMoveEvent(QMouseEvent *event) を再実装しています。

[override virtual protected] void QMenuBar::mousePressEvent(QMouseEvent *e)

QWidget::mousePressEvent(QMouseEvent *event) を再実装します。

[override virtual protected] void QMenuBar::mouseReleaseEvent(QMouseEvent *e)

QWidget::mouseReleaseEvent(QMouseEvent *event) を再実装します。

[override virtual protected] void QMenuBar::paintEvent(QPaintEvent *e)

QWidget::paintEvent(QPaintEvent *event) を再実装します。

[override virtual protected] void QMenuBar::resizeEvent(QResizeEvent *)

QWidget::resizeEvent(QResizeEvent *event) を再実装します。

void QMenuBar::setActiveAction(QAction *act)

現在選択されているアクションを「act 」に設定します。

「activeAction()」も参照してください 。

void QMenuBar::setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopRightCorner)

これにより、指定されたwidget は、corner の設定に応じて、最初のメニュー項目のすぐ左、または最後のメニュー項目のすぐ右に表示されるようになります。

メニューバーはwidget の所有権を取得し、メニューバー内に再配置します。ただし、corner にすでにウィジェットが含まれている場合、その既存のウィジェットは管理対象外となりますが、引き続きメニューバーの可視子要素として残ります。

注: Qt::TopRightCorner またはQt::TopLeftCorner 以外のコーナーを使用すると 、警告が表示されます。

関連項目: cornerWidget()。

[override virtual slot] void QMenuBar::setVisible(bool visible)

プロパティ「QWidget::visible 」のアクセス関数を再実装します。

[override virtual] QSize QMenuBar::sizeHint() const

プロパティ「QWidget::sizeHint 」のアクセス関数を再実装します。

[override virtual protected] void QMenuBar::timerEvent(QTimerEvent *e)

QObject::timerEvent(QTimerEvent *event) の再実装です。

NSMenu *QMenuBar::toNSMenu()

このメニューバーのネイティブ NSMenu を返します。macOS でのみ利用可能です。

注:Qt によって 、ネイティブのメニューバーにデリゲートが設定される場合があります。独自のデリゲートを設定する必要がある場合は、元のデリゲートを保存し、それへの呼び出しをすべて転送するようにしてください。

[signal] void QMenuBar::triggered(QAction *action)

このシグナルは、このメニューバーに属するメニュー内のアクションがマウスのクリックによって実行された際に発火します。action は、このシグナルの発火を引き起こしたアクションです。

注: このシグナルが機能するためには、QMenuBar が QMenu の所有権を持っている必要があります。

通常、各メニューアクションは `QAction::triggered()` を使用して単一のスロットに接続されますが、複数の項目を単一のスロットに接続したい場合もあるでしょう(多くの場合、ユーザーが配列から選択する場合など)。このような場合に、このシグナルが役立ちます。

hovered() およびQAction::triggered()も参照してください 。

© 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.