このページでは

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 にはフレームがなく、タイトルバーも小さくなります。

注: macOSでは 、QDockWidget がネイティブのウィンドウハンドルを持っている場合(たとえば、QDockWidget 自体または子ウィジェットに対してwinId() が呼び出されている場合など)、制限により、ドッキングを解除する際にドックウィジェットをドラッグすることはできません。 ドラッグを開始するとドックウィジェットはドックから外れますが、ドックウィジェット自体を移動させるには、もう一度ドラッグを行う必要があります。

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)

Notifierシグナル:

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` に対する通知 シグナルです。

[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`の通知 シグナルです。

[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` に対する通知 シグナルです。

関連項目 :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.