QMenuBar Class
QMenuBar 클래스는 가로 메뉴 표시줄을 제공합니다. 더 보기...
Header: | #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를 이 메뉴의 바로 가기로 설정합니다. ("&&"를 사용하여 메뉴 모음에 실제 앰퍼샌드를 표시할 수 있습니다.)
메뉴 모음을 배치할 필요가 없습니다. 자체 지오메트리를 상위 위젯의 상단에 자동으로 설정하고 상위 위젯의 크기가 조정될 때마다 적절하게 변경합니다.
사용법
대부분의 메인 창 스타일 애플리케이션에서는 QMainWindow 에 제공된 menuBar() 함수를 사용하여 메뉴 모음에 QMenu를 추가하고 팝업 메뉴에 QAction를 추가합니다.
예( 메뉴 예제에서):
fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(newAct);
메뉴 항목은 removeAction()로 제거할 수 있습니다.
QWidgetAction 클래스의 인스턴스를 사용하여 메뉴에 위젯을 추가할 수 있습니다. 이러한 작업은 일반적인 방법으로 메뉴에 삽입할 수 있으며, 자세한 내용은 QMenu 문서를 참조하세요.
플랫폼에 따른 룩앤필
플랫폼마다 메뉴 표시줄의 모양과 사용자가 메뉴와 상호작용할 때의 동작에 대한 요구 사항이 다릅니다. 예를 들어, Windows 시스템은 메뉴 모음에 있는 항목의 키보드 단축키를 나타내는 밑줄 친 문자 니모닉이 Alt 키를 누를 때만 표시되도록 구성되는 경우가 많습니다.
글로벌 메뉴 모음으로서의 Q메뉴 모음
macOS 및 Ubuntu Unity와 같은 특정 Linux 데스크톱 환경에서 QMenuBar는 시스템 전체 메뉴 표시줄을 사용하기 위한 래퍼입니다. 하나의 대화 상자에 여러 메뉴 표시줄이 있는 경우 가장 바깥쪽 메뉴 표시줄(일반적으로 위젯 플래그가 Qt::Window 인 위젯 내부)이 시스템 전체 메뉴 표시줄에 사용됩니다.
macOS용 Qt는 메뉴 바 병합 기능도 제공하여 QMenuBar가 macOS 메뉴 바 레이아웃에 더 가깝게 일치하도록 합니다. 항목을 이동해도 해당 슬롯은 원래 위치에 있는 것처럼 계속 실행됩니다.
병합 기능은 메뉴 항목의 QAction::menuRole()를 기반으로 합니다. 항목에 QAction::TextHeuristicRole 이 있는 경우 다음 휴리스틱을 사용하여 제목과 일치하는 문자열에 따라 역할이 결정됩니다:
문자열 일치 | 배치 | 참고 |
---|---|---|
about.* | 애플리케이션 메뉴 | <애플리케이션 이름> 정보 | 애플리케이션 이름은 Info.plist 파일에서 가져옵니다(아래 참고 참조). 이 항목을 찾을 수 없으면 애플리케이션 메뉴에 정보 항목이 표시되지 않습니다. |
구성, 옵션, 설정, 설정 또는 환경설정 | 애플리케이션 메뉴 | 환경설정 | 이 항목을 찾을 수 없는 경우 설정 항목이 비활성화됩니다. |
종료 또는 종료 | 애플리케이션 메뉴 > <애플리케이션 이름> 종료 | 이 항목을 찾을 수 없는 경우 QCoreApplication::quit()를 호출하는 기본 종료 항목이 생성됩니다. |
QAction::menuRole() 속성을 QAction::NoRole 으로 설정하여 이 동작을 재정의할 수 있습니다.
Mac 애플리케이션의 모든 창이 하나의 메뉴 막대를 공유하도록 하려면 부모가 없는 메뉴 막대를 만들어야 합니다. 이 방법으로 부모가 없는 메뉴 모음을 만듭니다:
참고: 공유 메뉴 모음은 QMainWindow 을 부모로 가지므로 QMainWindow::menuBar()을 호출하여 공유 메뉴 모음을 만들지 마세요. 해당 메뉴 모음은 부모 QMainWindow 에 대해서만 표시됩니다.
참고: macOS 메뉴 표시줄의 애플리케이션 이름에 사용되는 텍스트는 애플리케이션의 번들에 있는 Info.plist
파일에 설정된 값에서 가져옵니다. 자세한 내용은 macOS용 Qt - 배포를 참조하십시오.
참고: Linux에서 com.canonical.AppMenu.Registrar 서비스를 D-Bus 세션 버스에서 사용할 수 있는 경우, Qt는 설명한 대로 이 서비스와 통신하여 애플리케이션의 메뉴를 전역 메뉴 표시줄에 설치합니다.
예제
메뉴 예제는 QMenuBar와 QMenu 를 사용하는 방법을 보여줍니다. 다른 메인 창 응용 프로그램 예제에서도 이러한 클래스를 사용하여 메뉴를 제공합니다.
또한 QMenu, QShortcut, QAction, Apple 휴먼 인터페이스 가이드라인 소개 및 메뉴 예제를참조하십시오 .
속성 문서
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 * 이벤트).
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 * 이벤트).
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 * 이벤트).
[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 * 이벤트).
[override virtual protected]
void QMenuBar::focusOutEvent(QFocusEvent *)
다시 구현합니다: QWidget::focusOutEvent(QFocusEvent * 이벤트).
[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 을 삽입하고 메뉴 메뉴Action()을 반환합니다.
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 * 이벤트).
[override virtual protected]
void QMenuBar::leaveEvent(QEvent *)
다시 구현합니다: QWidget::leaveEvent(QEvent * 이벤트).
[override virtual]
QSize QMenuBar::minimumSizeHint() const
속성에 대한 액세스 함수를 다시 구현합니다: QWidget::minimumSizeHint.
[override virtual protected]
void QMenuBar::mouseMoveEvent(QMouseEvent *e)
다시 구현합니다: QWidget::mouseMoveEvent(QMouseEvent * 이벤트).
[override virtual protected]
void QMenuBar::mousePressEvent(QMouseEvent *e)
다시 구현합니다: QWidget::mousePressEvent(QMouseEvent * 이벤트).
[override virtual protected]
void QMenuBar::mouseReleaseEvent(QMouseEvent *e)
다시 구현합니다: QWidget::mouseReleaseEvent(QMouseEvent * 이벤트).
[override virtual protected]
void QMenuBar::paintEvent(QPaintEvent *e)
다시 구현합니다: QWidget::paintEvent(QPaintEvent * 이벤트).
[override virtual protected]
void QMenuBar::resizeEvent(QResizeEvent *)
다시 구현합니다: QWidget::resizeEvent(QResizeEvent * 이벤트).
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(Q타이머이벤트 *이벤트).
NSMenu *QMenuBar::toNSMenu()
이 메뉴 표시줄의 기본 NSMenu를 반환합니다. macOS에서만 사용할 수 있습니다.
참고: Qt는 네이티브 메뉴 바에 델리게이트를 설정할 수 있습니다. 고유한 델리게이트를 설정해야 하는 경우 원본을 저장하고 모든 호출을 전달해야 합니다.
[signal]
void QMenuBar::triggered(QAction *action)
이 신호는 마우스 클릭으로 인해 이 메뉴바에 속한 메뉴의 동작이 트리거될 때 발생하며, action 이 신호가 발생하게 된 동작입니다.
일반적으로 QAction::triggered()를 사용하여 각 메뉴 동작을 단일 슬롯에 연결하지만, 때로는 여러 항목을 단일 슬롯에 연결하고 싶을 때가 있습니다(사용자가 배열에서 선택하는 경우가 가장 많음). 이 신호는 이러한 경우에 유용합니다.
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.