QDockWidget 类
QDockWidget 类提供了一个可以在 QMainWindow 内部停靠或作为桌面上的顶层窗口浮动的窗口小部件。更多信息...
头部文件 | #include <QDockWidget> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake | QT += widgets |
继承 | QWidget |
公共类型
枚举 | DockWidgetFeature { DockWidgetClosable, DockWidgetMovable, DockWidgetFloatable, DockWidgetVerticalTitleBar, NoDockWidgetFeatures } |
标志 | DockWidgetFeatures |
属性
- allowedAreas : Qt::DockWidgetAreas
- features : DockWidgetFeatures
- floating : bool
- windowTitle : QString
公共函数
QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) | |
QDockWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) | |
虚拟 | ~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 |
信号
void | allowedAreasChanged(Qt::DockWidgetAreas allowedAreas) |
void | dockLocationChanged(Qt::DockWidgetArea area) |
void | featuresChanged(QDockWidget::DockWidgetFeatures features) |
void | topLevelChanged(bool topLevel) |
void | visibilityChanged(bool visible) |
受保护函数
虚拟 void | initStyleOption(QStyleOptionDockWidget *option) const |
重新实现受保护函数
虚拟 void | changeEvent(QEvent *event) override |
虚拟 void | closeEvent(QCloseEvent *event) override |
虚拟 bool | event(QEvent *event) override |
虚拟 void | paintEvent(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::DockWidgetClosable | 0x01 | 停靠窗口可以被关闭。 |
QDockWidget::DockWidgetMovable | 0x02 | 用户可以将停靠窗口在停靠之间移动。 |
QDockWidget::DockWidgetFloatable | 0x04 | 可以将停靠窗口从主窗口中分离出来,并以独立窗口的形式浮动。 |
QDockWidget::DockWidgetVerticalTitleBar | 0x08 | 停靠窗口在其左侧显示垂直标题栏。这可以用来增加QMainWindow中垂直空间的数量。 |
QDockWidget::NoDockWidgetFeatures | 0x00 | 停靠窗口不能被关闭、移动或浮动。 |
DockWidgetFeatures类型是QFlags<DockWidgetFeature>的typedef。它存储一个DockWidgetFeature值的OR组合。
属性文档
allowedAreas : Qt::DockWidgetAreas
停靠小部件可以放置的区域
默认值为 Qt::AllDockWidgetAreas。
访问函数
Qt::DockWidgetAreas | allowedAreas() const |
void | setAllowedAreas(Qt::DockWidgetAreas areas) |
通知信号
void | allowedAreasChanged(Qt::DockWidgetAreas allowedAreas) |
另请参阅Qt::DockWidgetArea。
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) |
另请参阅isWindow() 和 topLevelChanged。
windowTitle : QString
此属性表示停靠小部件的标题(标签)
默认情况下,此属性包含一个空字符串。
访问函数
QString | windowTitle() const |
void | setWindowTitle(const QString &) |
通知信号
void | windowTitleChanged(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作为停靠窗口的标题栏。如果widget是nullptr
,则之前设置在停靠窗口上的任何自定义标题栏 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::text 和 QWidget::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.在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。