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)

保護された関数

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 へのポインターで、fileMenuQMenu へのポインターだとすると、次のステートメントでメニューがメニューバーに挿入されます:

menubar->addMenu(fileMenu);

メニュー項目のテキストにあるアンパサンドは、Alt+Fをこのメニューのショートカットとして設定します。メニュー項目のテキストにあるアンパサンドは、Alt+Fをこのメニューのショートカットとして設定します(&&を使えば、メニューバーに本物のアンパサンドを表示できます)。

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

使い方

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

例(メニューの例より):

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

メニュー項目はremoveAction() で削除できます。

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

プラットフォーム依存のルック&フィール

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

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

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

Qt for macOS では、QMenuBar を macOS のメニューバーレイアウトに近づけるために、メニューバーのマージ機能も提供しています。エントリが移動しても、そのスロットは元の場所にあったかのように動作します。

マージ機能は、メニュー項目のQAction::menuRole() に基づいています。アイテムがQAction::TextHeuristicRole を持っている場合、役割は以下のヒューリスティックを使ってタイトルの文字列マッチによって決定されます:

文字列マッチ配置備考
についてアプリケーションメニューアプリケーション名は、Info.plist ファイルから取得されます。この項目が見つからない場合、アプリケーションメニューにAbout項目は表示されません。
コンフィグ、オプション、セットアップ、設定、プリファレンスアプリケーションメニュー|環境設定この項目が見つからない場合、設定項目は無効になります。
終了または終了アプリケーションメニュー|終了 <アプリケーション名この項目が見つからない場合、デフォルトのQuit項目が作成され、QCoreApplication::quit ()を呼び出します。

この動作をオーバーライドするには、QAction::menuRole() プロパティをQAction::NoRole に設定します。

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

QMenuBar *menuBar = new QMenuBar(nullptr);

注:共有メニュー・バーを作成するためにQMainWindow::menuBar ()を呼び出さないでください。なぜなら、そのメニュー・バーはQMainWindow を親として持つからです。そのメニュー・バーは、親であるQMainWindow に対してのみ表示されます。

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

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

Menus の例では、QMenuBar とQMenu の使い方を説明しています。他のメイン・ウィンドウ・アプリケーションの例でも、これらのクラスを使ってメニューを提供しています。

QMenu,QShortcut,QAction,Apple Human Interface Guidelines入門,Menus Exampleも参照してください

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

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

ptQAction を返す。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)

icontitle を持つ新しいQMenu をメニューバーに追加する。メニューバーはメニューの所有権を持つ。新しいメニューを返します。

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

QAction *QMenuBar::addSeparator()

メニューにセパレーターを追加する。

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

再実装:QWidget::changeEvent(QEvent *event)。

void QMenuBar::clear()

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

Note: macOSでは、システムメニューバーにマージされたメニュー項目は、この関数では削除されません。これを処理する1つの方法は、余分なアクションを自分で削除することです。異なるメニューに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

メニュー・バーの値とaction の情報でoption を初期化する。このメソッドは、サブクラスが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() が真を返すアクションを作成します。この関数は、新しく作成したアクションをメニューバーのアクションリストに挿入し、アクション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)

これは、corner に応じて、与えられたwidget を最初のメニュー項目の左側、または最後のメニュー項目の右側に直接表示するように設定する。

メニューバーは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 は、シグナルが発せられる原因となったアクションである。

注意: このシグナルが動作するためには、QMenuBarQMenu のオーナーシップを持っている必要がある。

通常は、QAction::triggered ()を使って、各メニューのアクションを1つのスロットに接続しますが、複数のアイテムを1つのスロットに接続したい場合もあります(ユーザーが配列から選択する場合によくあります)。このシグナルはそのような場合に便利です。

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

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