2

赢 7,Qt 5.3

我在我的应用程序中使用 a QDockWidget。按预期工作。

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

为了将我的小部件取消停靠为窗口,我使用myDockWidget->setFloating(true)(在我自己的插槽中)。但是现在,当小部件取消停靠时,浮动窗口不再有边框(因此无法移动)。

如果我注释掉setTitleBarWidget,也myDockWidget->setFloating(true)可以。所以原来的标题栏似乎包含了一些逻辑。但是,通过查看源代码,我找不到任何特别之处。

任何提示我可以做些什么来克服这个问题?

4

1 回答 1

2

这是预期的行为。请参阅QDockWidget::setTitleBarWidget文档:

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

此行为的目的是允许为停靠小部件实现完全自定义的标题栏。

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

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

于 2014-07-15T10:27:49.130 回答