QDockWidget 类

QDockWidget 类提供了一个可以在 QMainWindow 内部停靠或作为桌面上的顶层窗口浮动的窗口小部件。更多信息...

头部文件 #include <QDockWidget>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承 QWidget

公共类型

枚举DockWidgetFeature { DockWidgetClosable, DockWidgetMovable, DockWidgetFloatable, DockWidgetVerticalTitleBar, NoDockWidgetFeatures }
标志DockWidgetFeatures

属性

公共函数

QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
QDockWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
虚拟~QDockWidget()
Qt::DockWidgetAreasallowedAreas() const
QDockWidget::DockWidgetFeaturesfeatures() const
boolisAreaAllowed(Qt::DockWidgetArea area) const
boolisFloating() const
voidsetAllowedAreas(Qt::DockWidgetAreas areas)
voidsetFeatures(QDockWidget::DockWidgetFeatures features)
voidsetFloating(bool floating)
voidsetTitleBarWidget(QWidget *widget)
voidsetWidget(QWidget *widget)
QWidget *titleBarWidget() const
QAction *toggleViewAction() const
QWidget *widget() const

信号

voidallowedAreasChanged(Qt::DockWidgetAreas allowedAreas)
voiddockLocationChanged(Qt::DockWidgetArea area)
voidfeaturesChanged(QDockWidget::DockWidgetFeatures features)
voidtopLevelChanged(bool topLevel)
voidvisibilityChanged(bool visible)

受保护函数

虚拟 voidinitStyleOption(QStyleOptionDockWidget *option) const

重新实现受保护函数

虚拟 voidchangeEvent(QEvent *event) override
虚拟 voidcloseEvent(QCloseEvent *event) override
虚拟 boolevent(QEvent *event) override
虚拟 voidpaintEvent(QPaintEvent *event) override

详细描述

QDockWidget提供了停靠窗口的概念,也称为工具面板或实用窗口。停靠窗口是放置在中心部件周围的停靠部件区域中的次要窗口,在QMainWindow中。

用户可以在当前区域内部移动停靠窗口,将它们移动到新区域,或浮动(例如,取消停靠)。QDockWidget API允许程序员限制停靠窗口移动、浮动和关闭的能力,以及它们可以放置的区域。

外观

QDockWidget由标题栏和内容区域组成。标题栏显示停靠窗口的窗口标题、一个浮动按钮和一个关闭按钮。根据QDockWidget的状态,浮动关闭按钮可能会禁用或根本不显示。

标题栏和按钮的视觉外观取决于使用的样式

QDockWidget充当其子部件的包装器,使用setWidget()设置。自定义大小提示、最小和最大大小以及大小策略应在子部件中实现。QDockWidget将尊重它们,调整自己的约束以包括边框和标题。不应在QDockWidget本身上设置大小约束,因为它们取决于它是否停靠;已停靠的QDockWidget没有边框和较小的标题栏。

注意:在macOS上,如果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::DockWidgetAreasallowedAreas() const
voidsetAllowedAreas(Qt::DockWidgetAreas areas)

通知信号

voidallowedAreasChanged(Qt::DockWidgetAreas allowedAreas)

另请参阅Qt::DockWidgetArea

features : DockWidgetFeatures

此属性表示停靠小部件是否可移动、可关闭和可浮动

默认情况下,此属性设置为 DockWidgetClosableDockWidgetMovableDockWidgetFloatable 的组合。

访问函数

QDockWidget::DockWidgetFeaturesfeatures() const
voidsetFeatures(QDockWidget::DockWidgetFeatures features)

通知信号

voidfeaturesChanged(QDockWidget::DockWidgetFeatures features)

另请参阅DockWidgetFeature

floating : bool

此属性表示停靠小部件是否浮动

浮动停靠小部件作为独立窗口呈现给用户,位于其父 QMainWindow 的“上方”,而不是停靠在 QMainWindow 内或多个选项卡停靠小部件组中。

浮动停靠小部件可以分别定位和调整大小,可以是程序化操作或通过鼠标交互实现。

默认情况下,此属性值为 true

当此属性发生变化时,将发出 topLevelChanged() 信号。

访问函数

boolisFloating() const
voidsetFloating(bool floating)

另请参阅isWindow() 和 topLevelChanged

windowTitle : QString

此属性表示停靠小部件的标题(标签)

默认情况下,此属性包含一个空字符串。

访问函数

QStringwindowTitle() const
voidsetWindowTitle(const QString &)

通知信号

voidwindowTitleChanged(const QString &title)

成员函数文档

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

使用父窗口 parent 和窗口标志 flags 构建一个 QDockWidget。停靠小部件将被放置在左侧停靠小部件区域。

窗口标题设置为 title。当 QDockWidget 停靠和解除停靠时使用此标题。它还用于 QMainWindow 提供的上下文菜单中。

另请参阅setWindowTitle

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

使用父窗口 parent 和窗口标志 flags 构建一个 QDockWidget。停靠小部件将被放置在左侧停靠小部件区域。

[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)

当停靠小部件被移动到另一个停靠 区域 或在当前停靠区域中的不同位置时,将发出此信号。这可能在停靠小部件被程序移动或由用户拖动到新位置时发生。

[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

使用此 QDockWidget 的值来初始化 option。当子类需要 QStyleOptionDockWidget 但不想自己填写所有信息时,此方法很有用。

另请参阅:QStyleOption::initFrom().

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

如果此停靠小部件可以在给定的 区域 中放置,则返回 true;否则返回 false

[覆盖虚保护] void QDockWidget::paintEvent(QPaintEvent *event)

重新实现: QWidget::paintEvent(QPaintEvent *event).

void QDockWidget::setTitleBarWidget(QWidget *widget)

设置任意widget作为停靠窗口的标题栏。如果widgetnullptr,则之前设置在停靠窗口上的任何自定义标题栏 widget 都将被移除,但不会被删除,并使用默认标题栏。

如果设置了标题栏 widget,当停靠窗口被浮动时,QDockWidget将不会使用本机窗口装饰。

下面是实现自定义标题栏的一些提示

  • 未被标题栏 widget 显式处理的鼠标事件必须通过调用 QMouseEvent::ignore() 被忽略。这些事件随后传递到 QDockWidget 父窗口,并以常规方式处理,如当拖动标题栏时移动,双击时停靠或解除停靠等。
  • 当在 QDockWidget 上设置 DockWidgetVerticalTitleBar 时,标题栏 widget 将相应地重新定位。在 resizeEvent() 中,标题栏应检查它应采用的什么方向
    QDockWidget *dockWidget = qobject_cast<QDockWidget*>(parentWidget());
    if (dockWidget->features() & QDockWidget::DockWidgetVerticalTitleBar) {
        // I need to be vertical
    } else {
        // I need to be horizontal
    }
  • 标题栏 widget 必须有有效的 QWidget::sizeHint() 和 QWidget::minimumSizeHint()。这些函数应考虑标题栏的当前方向。
  • 无法从停靠窗口中移除标题栏。然而,可以通过设置默认构造的 QWidget 作为标题栏 widget 来实现类似的效果。

使用qobject_cast(),如上面所示,标题栏 widget 可以完全访问其父 QDockWidget。因此,它可以执行诸如在用户操作时进行停靠和隐藏等操作。

另请参阅titleBarWidget() 和 DockWidgetVerticalTitleBar.

void QDockWidget::setWidget(QWidget *widget)

将停靠窗口的 widget 设置为widget

如果停靠窗口在使用widget时可见,您必须显式显示它。

请注意,您必须在调用此函数之前添加widget的布局;否则,widget将不可见。

另请参阅widget().

QWidget *QDockWidget::titleBarWidget() const

返回设置在 QDockWidget 上的自定义标题栏 widget,如果没有设置自定义标题栏,则为 nullptr

另请参阅setTitleBarWidget().

QAction *QDockWidget::toggleViewAction() const

返回一个可检查的操作,可以将它添加到菜单和工具栏中,以便用户显示或关闭此停靠窗口。

操作文本设置为停靠窗口的窗口标题。

注意:无法使用此操作以编程方式显示或隐藏停靠窗口。请使用 visible 属性执行此操作。

另请参阅QAction::textQWidget::windowTitle.

[信号] void QDockWidget::topLevelChanged(bool topLevel)

当浮动属性变化时,会发出此信号。当停靠窗口现在为浮动时,topLevel 参数为 true;否则为 false。

另请参阅isWindow().

[信号] void QDockWidget::visibilityChanged(bool visible)

当停靠窗口变为可见(或不可见)时,会发出此信号。这发生在窗口被隐藏或显示时,以及当它作为标签停靠在标签停靠区中,并且其标签被选中或取消选中时。

注意:信号可能不同于 QWidget::isVisible。如果停靠窗口被最小化或标签化,并且与其非选中或非活动标签相关联,则可能发生这种情况。

QWidget *QDockWidget::widget() const

返回停靠窗口的窗口小部件。如果未设置窗口小部件,则此函数返回零。

另请参阅setWidget().

© 2024 The Qt Company Ltd. 本文档中的文档贡献属于其各自所有者的版权。提供的文档受GNU自由文档许可版1.3的条款约束,由自由软件基金会发布。Qt及其相关标志是The Qt Company Ltd.在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。