이 페이지에서

QDockWidget Class

QDockWidget 클래스는 QMainWindow 내에 도킹하거나, 바탕화면에서 최상위 창으로 떠 있게 할 수 있는 위젯을 제공합니다. 더 보기...

헤더: #include <QDockWidget>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
상속: QWidget

공개 유형

enum DockWidgetFeature { DockWidgetClosable, DockWidgetMovable, DockWidgetFloatable, DockWidgetVerticalTitleBar, NoDockWidgetFeatures }
flags DockWidgetFeatures

속성

공개 함수

QDockWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
virtual ~QDockWidget()
Qt::DockWidgetAreas allowedAreas() const
Qt::DockWidgetArea dockLocation() const
QDockWidget::DockWidgetFeatures features() const
bool isAreaAllowed(Qt::DockWidgetArea area) const
bool isFloating() const
void setAllowedAreas(Qt::DockWidgetAreas areas)
(since 6.9) void setDockLocation(Qt::DockWidgetArea area)
void setFeatures(QDockWidget::DockWidgetFeatures features)
void setFloating(bool floating)
void setTitleBarWidget(QWidget *widget)
void setWidget(QWidget *widget)
QWidget *titleBarWidget() const
QAction *toggleViewAction() const
QWidget *widget() const

신호

void allowedAreasChanged(Qt::DockWidgetAreas allowedAreas)
void dockLocationChanged(Qt::DockWidgetArea area)
void featuresChanged(QDockWidget::DockWidgetFeatures features)
void topLevelChanged(bool topLevel)
void visibilityChanged(bool visible)

보호된 함수

virtual void initStyleOption(QStyleOptionDockWidget *option) const

재구현된 보호된 함수

virtual void changeEvent(QEvent *event) override
virtual void closeEvent(QCloseEvent *event) override
virtual bool event(QEvent *event) override
virtual void paintEvent(QPaintEvent *event) override

상세 설명

QDockWidget은 도구 팔레트 또는 유틸리티 창이라고도 하는 도크 위젯의 개념을 제공합니다. 도크 창은 QMainWindow 에서 메인 휠릿( central widget ) 주변의 도크 위젯 영역에 배치되는 보조 창입니다.

도구 모음 내의 도크 위젯과 위젯용 컨테이너를 보여주는 다이어그램

도크 윈도우는 최종 사용자가 현재 영역 내에서 이동하거나, 새로운 영역으로 이동하거나, 플로팅(예: 도크에서 분리)할 수 있습니다. QDockWidget API를 사용하면 프로그래머가 도크 위젯의 이동, 플로팅 및 닫기 기능을 제한할 수 있을 뿐만 아니라, 도크 위젯을 배치할 수 있는 영역도 제한할 수 있습니다.

외관

QDockWidget은 제목 표시줄과 콘텐츠 영역으로 구성됩니다. 제목 표시줄에는 도크 위젯의 window title, 독립 모드 버튼 및 닫기 버튼이 표시됩니다. QDockWidget의 상태에 따라 독립 모드 버튼과 닫기 버튼은 비활성화되거나 아예 표시되지 않을 수 있습니다.

제목 표시줄과 버튼의 시각적 모양은 사용 중인 style 에 따라 달라집니다.

QDockWidget은 setWidget()을 통해 설정된 자식 위젯을 감싸는 래퍼 역할을 합니다. 사용자 정의 크기 힌트, 최소 및 최대 크기, 크기 정책은 자식 위젯에서 구현되어야 합니다. QDockWidget은 이러한 설정들을 준수하며, 프레임과 제목 표시줄을 포함하도록 자체 제약 조건을 조정합니다. QDockWidget 자체에는 크기 제약 조건을 설정해서는 안 됩니다. 도킹 여부에 따라 제약 조건이 달라지기 때문입니다. 도킹된 QDockWidget은 테두리가 없고 제목 표시줄의 크기도 더 작아집니다.

winId참고: macOS에서 QDockWidget이 네이티브 창 핸들을 가지고 있는 경우(예: QDockWidget()이 해당 위젯이나 자식 위젯에 호출된 경우), 제한 사항으로 인해 도킹을 해제할 때 도킹된 위젯을 드래그할 수 없습니다. 드래그를 시작하면 도크 위젯이 도크에서 분리되지만, 도크 위젯 자체를 이동하려면 두 번째 드래그가 필요합니다.

QMainWindow도 참조하십시오 .

멤버 유형 문서

enum QDockWidget::DockWidgetFeature
flags QDockWidget::DockWidgetFeatures

상수값설명
QDockWidget::DockWidgetClosable0x01도크 위젯은 닫을 수 있습니다.
QDockWidget::DockWidgetMovable0x02사용자가 도크 위젯을 도크 간에 이동할 수 있습니다.
QDockWidget::DockWidgetFloatable0x04도크 위젯은 메인 창에서 분리하여 독립된 창으로 띄울 수 있습니다.
QDockWidget::DockWidgetVerticalTitleBar0x08도크 위젯은 왼쪽에 세로 방향의 제목 표시줄을 표시합니다. 이를 통해 QMainWindow 의 세로 공간을 확보할 수 있습니다.
QDockWidget::NoDockWidgetFeatures0x00도크 위젯은 닫거나, 이동하거나, 독립 창으로 띄울 수 없습니다.

DockWidgetFeatures 유형은 QFlags<DockWidgetFeature>에 대한 typedef입니다. 이 유형은 DockWidgetFeature 값들의 OR 조합을 저장합니다.

속성 설명

allowedAreas : Qt::DockWidgetAreas

도크 위젯을 배치할 수 있는 영역

기본값은 Qt::AllDockWidgetAreas 입니다.

액세스 함수:

Qt::DockWidgetAreas allowedAreas() const
void setAllowedAreas(Qt::DockWidgetAreas areas)

Notifier 신호:

void allowedAreasChanged(Qt::DockWidgetAreas allowedAreas)

Qt::DockWidgetArea도 참조하십시오 .

[since 6.9] dockLocation : Qt::DockWidgetArea

이 속성은 현재 도킹 위치를 저장하며, 해당 도킹 위젯이 플로팅 상태이거나 메인 윈도우 부모가 없는 경우에는 Qt::NoDockLocation을 반환합니다.

이 열거형은 Qt 6.9에서 도입되었습니다.

액세스 함수:

Qt::DockWidgetArea dockLocation() const
void setDockLocation(Qt::DockWidgetArea area)

Notifier 신호:

void dockLocationChanged(Qt::DockWidgetArea area)

features : DockWidgetFeatures

이 속성은 도크 위젯을 이동할 수 있는지, 닫을 수 있는지, 그리고 자유롭게 배치할 수 있는지를 나타냅니다.

기본적으로 이 속성은 ` DockWidgetClosable`, ` DockWidgetMovable ` 및 ` DockWidgetFloatable`의 조합으로 설정됩니다.

액세스 함수:

QDockWidget::DockWidgetFeatures features() const
void setFeatures(QDockWidget::DockWidgetFeatures features)

알림 신호:

void featuresChanged(QDockWidget::DockWidgetFeatures features)

DockWidgetFeature도 참조하십시오 .

floating : bool

이 속성은 도크 위젯이 플로팅 상태인지 여부를 나타냅니다

플로팅 도크 위젯은 QMainWindow 에 도킹되거나 , 또는 탭이 있는 도크 위젯 그룹에 도킹되는 대신, 부모 창 QMainWindow 의 "맨 위"에 위치한 단일 독립 창 형태로 사용자에게 표시됩니다.

플로팅 도크 위젯은 프로그래밍 방식이나 마우스 조작을 통해 개별적으로 위치를 조정하고 크기를 변경할 수 있습니다.

기본적으로 이 속성의 값은 true 입니다.

이 속성이 변경되면 topLevelChanged() 신호가 발생합니다.

액세스 함수:

bool isFloating() const
void setFloating(bool floating)

알림 신호:

void topLevelChanged(bool topLevel)

isWindow() 및 topLevelChanged()도 참조하십시오 .

windowTitle : QString

이 속성은 도크 위젯의 제목(캡션)을 저장합니다.

기본적으로 이 속성은 빈 문자열을 포함합니다.

액세스 함수:

QString windowTitle() const
void setWindowTitle(const QString &)

Notifier 신호:

void windowTitleChanged(const QString &title)

멤버 함수 문서

[explicit] QDockWidget::QDockWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

부모가 ` parent `이고 창 플래그가 ` flags`인 `QDockWidget`을 생성합니다. 이 도크 위젯은 왼쪽 도크 위젯 영역에 배치됩니다.

[explicit] QDockWidget::QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

부모가 ` parent `이고 창 플래그가 ` flags`인 `QDockWidget`을 생성합니다. 이 도크 위젯은 왼쪽 도크 위젯 영역에 배치됩니다.

창 제목은 title 로 설정됩니다. 이 제목은 QDockWidget이 도킹되거나 도킹 해제될 때 사용됩니다. 또한 QMainWindow 에서 제공하는 컨텍스트 메뉴에서도 사용됩니다.

setWindowTitle()도 참조하십시오 .

[virtual noexcept] QDockWidget::~QDockWidget()

도크 위젯을 제거합니다.

[signal] void QDockWidget::allowedAreasChanged(Qt::DockWidgetAreas allowedAreas)

이 신호는 allowedAreas 속성이 변경될 때 발생합니다. allowedAreas 매개변수는 해당 속성의 새로운 값을 반환합니다.

참고: allowedAreas 속성에 대한Notifier 신호입니다.

[override virtual protected] void QDockWidget::changeEvent(QEvent *event)

QWidget::changeEvent(QEvent *event)를 재구현합니다.

[override virtual protected] void QDockWidget::closeEvent(QCloseEvent *event)

QWidget::closeEvent(QCloseEvent *event)를 재구현합니다.

[signal] void QDockWidget::dockLocationChanged(Qt::DockWidgetArea area)

이 신호는 도크 위젯이 다른 도크 area 로 이동하거나, 현재 도크 영역 내의 다른 위치로 이동할 때 발생합니다. 이는 도크 위젯이 프로그래밍 방식으로 이동되거나 사용자가 드래그하여 새로운 위치로 옮길 때 발생합니다.

참고: 속성 dockLocation 에 대한알림 신호입니다.

dockLocation() 및 setDockLocation()도 참조하십시오 .

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

QWidget::event(QEvent *event)를 재구현합니다.

[signal] void QDockWidget::featuresChanged(QDockWidget::DockWidgetFeatures features)

이 신호는 features 속성이 변경될 때 발생합니다. features 매개변수는 해당 속성의 새로운 값을 반환합니다.

참고: features 속성에 대한Notifier 신호입니다.

[virtual protected] void QDockWidget::initStyleOption(QStyleOptionDockWidget *option) const

option 를 QDockWidget 에 있는 값들로 초기화합니다. 이 방법은 하위 클래스에서 QStyleOptionDockWidget 가 필요하지만, 모든 정보를 직접 입력하고 싶지 않을 때 유용합니다.

QStyleOption::initFrom()도 참조하십시오 .

bool QDockWidget::isAreaAllowed(Qt::DockWidgetArea area) const

이 도크 위젯을 지정된 ` area`에 배치할 수 있는 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.

[override virtual protected] void QDockWidget::paintEvent(QPaintEvent *event)

QWidget::paintEvent(QPaintEvent *event)를 재구현합니다.

[since 6.9] void QDockWidget::setDockLocation(Qt::DockWidgetArea area)

이 도크 위젯을 area 에 할당합니다. 다른 도크 위치에 도킹되어 있는 경우, area 로 이동합니다. 플로팅 상태이거나 플로팅 탭의 일부인 경우, 다음에 setFloating(false)를 호출하면 area 에 도킹됩니다.

참고: setDockLocation (Qt::NoDockLocation)은 setFloating(true)와 동일합니다.

참고: dockLocation 속성의세터 함수입니다.

이 함수는 Qt 6.9에서 도입되었습니다.

dockLocation() 및 dockLocationChanged()도 참조하십시오 .

void QDockWidget::setTitleBarWidget(QWidget *widget)

도크 위젯의 제목 표시줄로 임의의 widget 를 설정합니다. widget 가 nullptr 인 경우, 도크 위젯에 이전에 설정된 사용자 정의 제목 표시줄 위젯은 제거되지만 삭제되지는 않으며, 대신 기본 제목 표시줄이 사용됩니다.

제목 표시줄 위젯이 설정된 경우, QDockWidget 는 플로팅 상태일 때 네이티브 창 장식을 사용하지 않습니다.

사용자 정의 제목 표시줄을 구현할 때 참고할 몇 가지 팁은 다음과 같습니다:

  • 제목 표시줄 위젯에서 명시적으로 처리되지 않는 마우스 이벤트는 ` QMouseEvent::ignore()`를 호출하여 무시해야 합니다. 그러면 이러한 이벤트는 ` QDockWidget ` 부모로 전달되며, 부모는 일반적인 방식으로 이를 처리합니다(예: 제목 표시줄을 드래그할 때 이동, 더블 클릭 시 도킹 및 도킹 해제 등).
  • QDockWidget 에 DockWidgetVerticalTitleBar 가 설정되면, 타이틀 바 위젯은 그에 따라 위치가 조정됩니다. resizeEvent()에서 타이틀 바는 어떤 방향을 취해야 할지 확인해야 합니다:
    QDockWidget *dockWidget = qobject_cast<QDockWidget*>(parentWidget());
    if (dockWidget->features() & QDockWidget::DockWidgetVerticalTitleBar) {
        // I need to be vertical
    } else {
        // I need to be horizontal
    }
  • 제목 표시줄 위젯은 유효한 QWidget::sizeHint() 및 QWidget::minimumSizeHint()을 가져야 합니다. 이 함수들은 제목 표시줄의 현재 방향을 고려해야 합니다.
  • 도크 위젯에서 제목 표시줄을 제거할 수는 없습니다. 그러나 기본 생성된 QWidget 을 제목 표시줄 위젯으로 설정함으로써 유사한 효과를 얻을 수 있습니다.

위와 같이 qobject_cast()을 사용하면, 제목 표시줄 위젯은 상위 QDockWidget 에 대한 완전한 접근 권한을 갖게 됩니다. 따라서 사용자 동작에 반응하여 도킹 및 숨기기 등의 작업을 수행할 수 있습니다.

titleBarWidget() 및 DockWidgetVerticalTitleBar도 참조하십시오 .

void QDockWidget::setWidget(QWidget *widget)

도크 위젯의 위젯을 ` widget`로 설정합니다.

widget 가 추가될 때 도크 위젯이 표시되어 있다면, 명시적으로 show()를 호출해야 합니다.

이 함수를 호출하기 전에 widget 의 레이아웃을 추가해야 합니다. 그렇지 않으면 widget 가 표시되지 않습니다.

widget()도 참조하십시오 .

QWidget *QDockWidget::titleBarWidget() const

QDockWidget 에 설정된 사용자 정의 제목 표시줄 위젯을 반환하며, 사용자 정의 제목 표시줄이 설정되지 않은 경우에는 nullptr 를 반환합니다.

setTitleBarWidget()도 참조하십시오 .

QAction *QDockWidget::toggleViewAction() const

사용자가 이 도크 위젯을 표시하거나 닫을 수 있도록 메뉴 및 툴바에 추가할 수 있는 체크 가능한 액션을 반환합니다.

이 액션의 텍스트는 도크 위젯의 창 제목으로 설정됩니다.

QAction 객체는 QDockWidget 가 소유합니다. QDockWidget 가 소멸되면 이 객체는 자동으로 삭제됩니다.

참고: 이 액션을 사용하여 도크 위젯을 프로그래밍 방식으로 표시하거나 숨길 수는 없습니다. 이를 위해서는 visible 속성을 사용하십시오.

QAction::text 및 QWidget::windowTitle도 참조하십시오 .

[signal] void QDockWidget::topLevelChanged(bool topLevel)

이 신호는 floating 속성이 변경될 때 발생합니다. topLevel 매개변수는 도크 위젯이 현재 플로팅 상태일 경우 true를, 그렇지 않을 경우 false를 반환합니다.

참고: floating 속성에 대한Notifier 신호입니다.

참조: isWindow() 함수.

[signal] void QDockWidget::visibilityChanged(bool visible)

이 신호는 도크 위젯이 ‘ visible ’(또는 보이지 않는 상태)가 될 때 발생합니다. 이는 위젯이 숨겨지거나 표시될 때뿐만 아니라, 탭이 있는 도크 영역에 도킹된 상태에서 해당 탭이 선택되거나 선택 해제될 때도 발생합니다.

참고: 이 신호는 ` QWidget::isVisible()`와 다를 수 있습니다. 도크 위젯이 최소화되거나 탭 형태로 변환되어 선택되지 않았거나 비활성화된 탭에 연결된 경우, 이러한 현상이 발생할 수 있습니다.

QWidget *QDockWidget::widget() const

도크 위젯에 해당하는 위젯을 반환합니다. 이 함수는 위젯이 설정되지 않은 경우 0을 반환합니다.

setWidget()도 참조하십시오 .

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