QDockWidget -窗口没有边界时浮动

QDockWidget - window with no borders when floating

本文关键字:边界 窗口 QDockWidget      更新时间:2023-10-16

win7, Qt 5.3

我在我的应用程序中使用QDockWidget

现在我通过将setTitleBarWidget(new QWidget(this))设置为默认构造的小部件来隐藏标题栏。根据Qt文档,这是标准的方法。也可以,标题栏不见了

为了卸载我的小部件作为窗口,我使用myDockWidget->setFloating(true)(在我自己的插槽)。但是现在,当小部件未停靠时,浮动窗口不再有边界(因此不能移动)。

如果我注释掉setTitleBarWidget, myDockWidget->setFloating(true)也可以工作。原来的标题栏似乎包含了一些逻辑。然而,通过查看源代码,我没有发现任何特别的东西。

我能做些什么来克服这个问题吗?

这是预期的行为。参见QDockWidget::setTitleBarWidget docs:

如果设置了标题栏小部件,QDockWidget在浮动时不会使用本机窗口装饰。

这个行为的目的是允许为dock小部件实现完全自定义的标题栏。

一个解决方法是连接到QDockWidget::topLevelChanged信号,当小部件成为浮动或停靠时发出,并将标题栏小部件设置为0,只要它是浮动的,以恢复默认行为。

请注意,当设置默认标题栏小部件时,以前的标题栏小部件不会被删除,因此您应该删除以前使用的QWidget,或者保存指向它的指针,以便下次使用它。