QMenuBar Class

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

Header: #include <QMenuBar>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Inherits: 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 ファイルから取得されます。この項目が見つからない場合、アプリケーションメニューに「バージョン情報」項目は表示されません。
コンフィグ、オプション、セットアップ、設定、プリファレンスアプリケーションメニュー|環境設定この項目が見つからない場合、設定項目は無効になります。
終了または終了アプリケーションメニュー|終了 <アプリケーション名この項目が見つからない場合、デフォルトの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()

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

メモ: 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 *)

再リプルメント: (QObject *watched, QEvent *event):QWidget::focusInEvent(QFocusEvent *event)。

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

再リンプルメント: (QFocusEvent *event):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)

再リンプルメント: (QMouseEvent *event):QWidget::mouseReleaseEvent(QMouseEvent *event).

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

再リンプルメント: (QMouseEvent *event):QWidget::paintEvent(QPaintEvent *event)。

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

再リンプルメント: (QPaintEvent *event):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()も参照して ください。

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。