QWidgetAction Class

QWidgetAction 클래스는 도구 모음과 같은 액션 기반 컨테이너에 사용자 지정 위젯을 삽입하기 위한 인터페이스로 QAction 을 확장합니다. 더 보기...

Header: #include <QWidgetAction>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
상속합니다: QAction

공용 함수

QWidgetAction(QObject *parent)
virtual ~QWidgetAction()
QWidget *defaultWidget() const
void releaseWidget(QWidget *widget)
QWidget *requestWidget(QWidget *parent)
void setDefaultWidget(QWidget *widget)

보호된 함수

virtual QWidget *createWidget(QWidget *parent)
QList<QWidget *> createdWidgets() const
virtual void deleteWidget(QWidget *widget)

재구현된 보호 함수

virtual bool event(QEvent *event) override
virtual bool eventFilter(QObject *obj, QEvent *event) override

상세 설명

애플리케이션의 대부분의 작업은 메뉴의 항목이나 도구 모음의 버튼으로 표시됩니다. 그러나 때로는 더 복잡한 위젯이 필요할 때가 있습니다. 예를 들어 워드 프로세서의 확대/축소 동작은 QToolBar 에서 QComboBox 를 사용하여 다양한 확대/축소 수준을 표시할 수 있습니다. QToolBar 는 단일 위젯을 삽입하기 위한 편의 기능으로 QToolBar::insertWidget()를 제공합니다. 그러나 여러 컨테이너에서 시각화를 위해 사용자 정의 위젯을 사용하는 액션을 구현하려면 QWidgetAction을 서브 클래싱해야 합니다.

예를 들어 QWidgetAction이 QToolBar 에 추가되면 QWidgetAction::createWidget()이 호출됩니다. 해당 함수를 다시 구현하면 지정된 부모를 가진 새 사용자 정의 위젯이 만들어집니다.

액션이 컨테이너 위젯에서 제거되면 QWidgetAction::deleteWidget()가 이전에 만든 사용자 지정 위젯을 인수로 사용하여 호출됩니다. 기본 구현은 위젯을 숨기고 QObject::deleteLater()를 사용하여 위젯을 삭제합니다.

사용자 정의 위젯이 하나만 있는 경우에는 setDefaultWidget()를 사용하여 기본 위젯으로 설정할 수 있습니다. 그런 다음 해당 위젯은 액션이 QToolBar 또는 일반적으로 QWidgetAction을 지원하는 액션 컨테이너에 추가되는 경우 사용됩니다. 기본 위젯만 있는 QWidgetAction이 두 개의 도구 모음에 동시에 추가되면 기본 위젯은 동작이 추가된 첫 번째 도구 모음에만 표시됩니다. QWidgetAction은 기본 위젯의 소유권을 넘겨받습니다.

마우스 이벤트 핸들러를 다시 구현하고 QAction::trigger()를 호출하는 등 동작을 활성화하는 것은 위젯에 달려 있습니다.

macOS: macOS에서 애플리케이션의 메뉴 표시줄에 있는 메뉴에 위젯을 추가하면 위젯이 추가되어 작동하지만 몇 가지 제한 사항이 있습니다:

  1. 위젯은 QMenu 에서 기본 메뉴 보기로 다시 부모가 변경됩니다. 메뉴를 다른 위치(예: 팝업 메뉴)에 표시하는 경우 위젯이 표시되지 않습니다.
  2. 위젯의 포커스/키보드 처리가 불가능합니다.
  3. Apple의 설계로 인해 현재 위젯의 마우스 추적은 작동하지 않습니다.
  4. triggered() 신호를 모달 대화 상자를 여는 슬롯에 연결하면 macOS 10.4에서 충돌이 발생하며(Apple에서 인정한 알려진 버그), 해결 방법은 DirectConnection 대신 QueuedConnection을 사용하는 것입니다.

QAction, QActionGroup, QWidget참조하세요 .

멤버 함수 문서

[explicit] QWidgetAction::QWidgetAction(QObject *parent)

parent 로 액션을 구성합니다.

[virtual noexcept] QWidgetAction::~QWidgetAction()

개체를 파괴하고 할당된 리소스를 해제합니다.

[virtual protected] QWidget *QWidgetAction::createWidget(QWidget *parent)

이 함수는 사용자 지정 위젯을 지원하는 컨테이너 위젯에 액션이 추가될 때마다 호출됩니다. 지정된 parent 위젯에서 사용자 정의 위젯을 동작의 표현으로 사용하지 않으려면 0을 반환해야 합니다.

deleteWidget()도 참조하세요 .

[protected] QList<QWidget *> QWidgetAction::createdWidgets() const

createWidget()를 사용하고 있으며 현재 액션이 추가된 위젯에서 사용 중인 위젯의 목록을 반환합니다.

QWidget *QWidgetAction::defaultWidget() const

기본 위젯을 반환합니다.

setDefaultWidget()도 참조하세요 .

[virtual protected] void QWidgetAction::deleteWidget(QWidget *widget)

이 함수는 이전에 createWidget()를 사용하여 만든 사용자 정의 widget 를 사용하여 동작을 표시하는 컨테이너 위젯에서 동작이 제거될 때마다 호출됩니다. 기본 구현은 widget 을 숨기고 QObject::deleteLater()을 사용하여 삭제하도록 예약합니다.

createWidget()도 참조하세요 .

[override virtual protected] bool QWidgetAction::event(QEvent *event)

다시 구현합니다: QAction::event(QEvent *e).

[override virtual protected] bool QWidgetAction::eventFilter(QObject *obj, QEvent *event)

다시 구현합니다: QObject::eventFilter(QObject *watched, QEvent *event).

void QWidgetAction::releaseWidget(QWidget *widget)

지정된 widget 을 해제합니다.

액션을 지원하는 컨테이너 위젯은 위젯 액션이 제거될 때 이 함수를 호출합니다.

requestWidget(), deleteWidget() 및 defaultWidget()도 참조하세요 .

QWidget *QWidgetAction::requestWidget(QWidget *parent)

지정된 parent 과 함께 액션을 나타내는 위젯을 반환합니다.

액션을 지원하는 컨테이너 위젯은 이 함수를 호출하여 액션의 시각적 표현으로 위젯을 요청할 수 있습니다.

releaseWidget(), createWidget(), defaultWidget()도 참조하세요 .

void QWidgetAction::setDefaultWidget(QWidget *widget)

widget 를 기본 위젯으로 설정합니다. 소유권은 QWidgetAction 로 이전됩니다. createWidget()가 하위 클래스에서 새 위젯을 반환하기 위해 다시 구현되지 않는 한 컨테이너 위젯이 requestWidget()를 통해 위젯을 요청할 때 기본 위젯이 사용됩니다.

defaultWidget()도 참조하세요 .

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