QDockWidget Class
The QDockWidget class provides a widget that can be docked inside a QMainWindow or floated as a top-level window on the desktop. More...
Header: | #include <QDockWidget> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
Inherits: | QWidget |
Public Types
enum | DockWidgetFeature { DockWidgetClosable, DockWidgetMovable, DockWidgetFloatable, DockWidgetVerticalTitleBar, NoDockWidgetFeatures } |
flags | DockWidgetFeatures |
Properties
- allowedAreas : Qt::DockWidgetAreas
- features : DockWidgetFeatures
- floating : bool
- windowTitle : QString
Public Functions
QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) | |
QDockWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) | |
virtual | ~QDockWidget() |
Qt::DockWidgetAreas | allowedAreas() const |
QDockWidget::DockWidgetFeatures | features() const |
bool | isAreaAllowed(Qt::DockWidgetArea area) const |
bool | isFloating() const |
void | setAllowedAreas(Qt::DockWidgetAreas areas) |
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 |
Signals
void | allowedAreasChanged(Qt::DockWidgetAreas allowedAreas) |
void | dockLocationChanged(Qt::DockWidgetArea area) |
void | featuresChanged(QDockWidget::DockWidgetFeatures features) |
void | topLevelChanged(bool topLevel) |
void | visibilityChanged(bool visible) |
Protected Functions
virtual void | initStyleOption(QStyleOptionDockWidget *option) const |
Reimplemented Protected Functions
virtual void | changeEvent(QEvent *event) override |
virtual void | closeEvent(QCloseEvent *event) override |
virtual bool | event(QEvent *event) override |
virtual void | paintEvent(QPaintEvent *event) override |
Detailed Description
QDockWidget provides the concept of dock widgets, also know as tool palettes or utility windows. Dock windows are secondary windows placed in the dock widget area around the central widget in a QMainWindow.
Dock windows can be moved inside their current area, moved into new areas and floated (e.g., undocked) by the end-user. The QDockWidget API allows the programmer to restrict the dock widgets ability to move, float and close, as well as the areas in which they can be placed.
Appearance
A QDockWidget consists of a title bar and the content area. The title bar displays the dock widgets window title, a float button and a close button. Depending on the state of the QDockWidget, the float and close buttons may be either disabled or not shown at all.
The visual appearance of the title bar and buttons is dependent on the style in use.
A QDockWidget acts as a wrapper for its child widget, set with setWidget(). Custom size hints, minimum and maximum sizes and size policies should be implemented in the child widget. QDockWidget will respect them, adjusting its own constraints to include the frame and title. Size constraints should not be set on the QDockWidget itself, because they change depending on whether it is docked; a docked QDockWidget has no frame and a smaller title bar.
Note: On macOS, if the QDockWidget has a native window handle (for example, if winId() is called on it or the child widget), then due to a limitation it will not be possible to drag the dock widget when undocking. Starting the drag will undock the dock widget, but a second drag will be needed to move the dock widget itself.
See also QMainWindow.
Member Type Documentation
enum QDockWidget::DockWidgetFeature
flags QDockWidget::DockWidgetFeatures
Constant | Value | Description |
---|---|---|
QDockWidget::DockWidgetClosable | 0x01 | The dock widget can be closed. |
QDockWidget::DockWidgetMovable | 0x02 | The dock widget can be moved between docks by the user. |
QDockWidget::DockWidgetFloatable | 0x04 | The dock widget can be detached from the main window, and floated as an independent window. |
QDockWidget::DockWidgetVerticalTitleBar | 0x08 | The dock widget displays a vertical title bar on its left side. This can be used to increase the amount of vertical space in a QMainWindow. |
QDockWidget::NoDockWidgetFeatures | 0x00 | The dock widget cannot be closed, moved, or floated. |
The DockWidgetFeatures type is a typedef for QFlags<DockWidgetFeature>. It stores an OR combination of DockWidgetFeature values.
Property Documentation
allowedAreas : Qt::DockWidgetAreas
areas where the dock widget may be placed
The default is Qt::AllDockWidgetAreas.
Access functions:
Qt::DockWidgetAreas | allowedAreas() const |
void | setAllowedAreas(Qt::DockWidgetAreas areas) |
Notifier signal:
void | allowedAreasChanged(Qt::DockWidgetAreas allowedAreas) |
See also Qt::DockWidgetArea.
features : DockWidgetFeatures
This property holds whether the dock widget is movable, closable, and floatable
By default, this property is set to a combination of DockWidgetClosable, DockWidgetMovable and DockWidgetFloatable.
Access functions:
QDockWidget::DockWidgetFeatures | features() const |
void | setFeatures(QDockWidget::DockWidgetFeatures features) |
Notifier signal:
void | featuresChanged(QDockWidget::DockWidgetFeatures features) |
See also DockWidgetFeature.
floating : bool
This property holds whether the dock widget is floating
A floating dock widget is presented to the user as a single, independent window "on top" of its parent QMainWindow, instead of being docked either in the QMainWindow, or in a group of tabbed dock widgets.
Floating dock widgets can be individually positioned and resized, both programmatically or by mouse interaction.
By default, this property is true
.
When this property changes, the topLevelChanged()
signal is emitted.
Access functions:
bool | isFloating() const |
void | setFloating(bool floating) |
See also isWindow() and topLevelChanged().
windowTitle : QString
This property holds the dock widget title (caption)
By default, this property contains an empty string.
Access functions:
QString | windowTitle() const |
void | setWindowTitle(const QString &) |
Notifier signal:
void | windowTitleChanged(const QString &title) |
Member Function Documentation
[explicit]
QDockWidget::QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
Constructs a QDockWidget with parent parent and window flags flags. The dock widget will be placed in the left dock widget area.
The window title is set to title. This title is used when the QDockWidget is docked and undocked. It is also used in the context menu provided by QMainWindow.
See also setWindowTitle().
[explicit]
QDockWidget::QDockWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
Constructs a QDockWidget with parent parent and window flags flags. The dock widget will be placed in the left dock widget area.
[virtual noexcept]
QDockWidget::~QDockWidget()
Destroys the dock widget.
[signal]
void QDockWidget::allowedAreasChanged(Qt::DockWidgetAreas allowedAreas)
This signal is emitted when the allowedAreas property changes. The allowedAreas parameter gives the new value of the property.
Note: Notifier signal for property allowedAreas.
[override virtual protected]
void QDockWidget::changeEvent(QEvent *event)
Reimplements: QWidget::changeEvent(QEvent *event).
[override virtual protected]
void QDockWidget::closeEvent(QCloseEvent *event)
Reimplements: QWidget::closeEvent(QCloseEvent *event).
[signal]
void QDockWidget::dockLocationChanged(Qt::DockWidgetArea area)
This signal is emitted when the dock widget is moved to another dock area, or is moved to a different location in its current dock area. This happens when the dock widget is moved programmatically or is dragged to a new location by the user.
[override virtual protected]
bool QDockWidget::event(QEvent *event)
Reimplements: QWidget::event(QEvent *event).
[signal]
void QDockWidget::featuresChanged(QDockWidget::DockWidgetFeatures features)
This signal is emitted when the features property changes. The features parameter gives the new value of the property.
Note: Notifier signal for property features.
[virtual protected]
void QDockWidget::initStyleOption(QStyleOptionDockWidget *option) const
Initialize option with the values from this QDockWidget. This method is useful for subclasses when they need a QStyleOptionDockWidget, but don't want to fill in all the information themselves.
See also QStyleOption::initFrom().
bool QDockWidget::isAreaAllowed(Qt::DockWidgetArea area) const
Returns true
if this dock widget can be placed in the given area; otherwise returns false
.
[override virtual protected]
void QDockWidget::paintEvent(QPaintEvent *event)
Reimplements: QWidget::paintEvent(QPaintEvent *event).
void QDockWidget::setTitleBarWidget(QWidget *widget)
Sets an arbitrary widget as the dock widget's title bar. If widget is nullptr
, any custom title bar widget previously set on the dock widget is removed, but not deleted, and the default title bar will be used instead.
If a title bar widget is set, QDockWidget will not use native window decorations when it is floated.
Here are some tips for implementing custom title bars:
- Mouse events that are not explicitly handled by the title bar widget must be ignored by calling QMouseEvent::ignore(). These events then propagate to the QDockWidget parent, which handles them in the usual manner, moving when the title bar is dragged, docking and undocking when it is double-clicked, etc.
- When DockWidgetVerticalTitleBar is set on QDockWidget, the title bar widget is repositioned accordingly. In resizeEvent(), the title bar should check what orientation it should assume:
QDockWidget *dockWidget = qobject_cast<QDockWidget*>(parentWidget()); if (dockWidget->features() & QDockWidget::DockWidgetVerticalTitleBar) { // I need to be vertical } else { // I need to be horizontal }
- The title bar widget must have a valid QWidget::sizeHint() and QWidget::minimumSizeHint(). These functions should take into account the current orientation of the title bar.
- It is not possible to remove a title bar from a dock widget. However, a similar effect can be achieved by setting a default constructed QWidget as the title bar widget.
Using qobject_cast() as shown above, the title bar widget has full access to its parent QDockWidget. Hence it can perform such operations as docking and hiding in response to user actions.
See also titleBarWidget() and DockWidgetVerticalTitleBar.
void QDockWidget::setWidget(QWidget *widget)
Sets the widget for the dock widget to widget.
If the dock widget is visible when widget is added, you must show() it explicitly.
Note that you must add the layout of the widget before you call this function; if not, the widget will not be visible.
See also widget().
QWidget *QDockWidget::titleBarWidget() const
Returns the custom title bar widget set on the QDockWidget, or nullptr
if no custom title bar has been set.
See also setTitleBarWidget().
QAction *QDockWidget::toggleViewAction() const
Returns a checkable action that can be added to menus and toolbars so that the user can show or close this dock widget.
The action's text is set to the dock widget's window title.
Note: The action can not be used to programmatically show or hide the dock widget. Use the visible property for that.
See also QAction::text and QWidget::windowTitle.
[signal]
void QDockWidget::topLevelChanged(bool topLevel)
This signal is emitted when the floating property changes. The topLevel parameter is true if the dock widget is now floating; otherwise it is false.
See also isWindow().
[signal]
void QDockWidget::visibilityChanged(bool visible)
This signal is emitted when the dock widget becomes visible (or invisible). This happens when the widget is hidden or shown, as well as when it is docked in a tabbed dock area and its tab becomes selected or unselected.
Note: The signal can differ from QWidget::isVisible(). This can be the case, if a dock widget is minimized or tabified and associated to a non-selected or inactive tab.
QWidget *QDockWidget::widget() const
Returns the widget for the dock widget. This function returns zero if the widget has not been set.
See also setWidget().