QMenuBar Class
QMenuBarクラスは、水平メニューバーを提供します。もっと詳しく...
ヘッダー | #include <QMenuBar> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
継承: | QWidget |
プロパティ
- defaultUp : bool
- nativeMenuBar : bool
パブリック関数
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 |
シグナル
保護された関数
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をこのメニューのショートカットとして設定します。メニュー項目のテキストにあるアンパサンドは、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つのメニューバーを共有したい場合は、親を持たないメニューバーを作成する必要があります。この方法で親のないメニュー・バーを作成します:
注:共有メニュー・バーを作成するために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
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()
メニューバーからすべてのアクションを削除します。
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
[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)
[override virtual]
QSize QMenuBar::sizeHint() const
[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 は、シグナルが発せられる原因となったアクションである。
通常は、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.