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 |
プロパティ
- 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 ファイルから取得されます。この項目が見つからない場合、アプリケーションメニューに「バージョン情報」項目は表示されません。 |
コンフィグ、オプション、セットアップ、設定、プリファレンス | アプリケーションメニュー|環境設定 | この項目が見つからない場合、設定項目は無効になります。 |
終了または終了 | アプリケーションメニュー|終了 <アプリケーション名 | この項目が見つからない場合、デフォルトの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()
メニューバーからすべてのアクションを削除します。
メモ: 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 は、シグナルが発せられる原因となったアクションです。
通常は、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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。