【问题标题】:QDockWidget - window with no borders when floatingQDockWidget - 浮动时没有边框的窗口
【发布时间】:2014-07-14 20:46:33
【问题描述】:

Win 7,Qt 5.3

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

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

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

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

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

【问题讨论】:

标签: c++ qt qdockwidget


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 是的,你是对的,谢谢你的提示。确认工作如你所说。只是为了完整性:如果我“存储”原始标题小部件并在浮动时将其设置回来(而不是 nullptr),则它不起作用。只有设置为 nullptr 才能解决问题。
  • 如果您通过拖放标题栏取消停靠,这将崩溃。
猜你喜欢
  • 2015-05-20
  • 2016-04-07
  • 1970-01-01
  • 2016-08-14
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 2013-11-07
  • 1970-01-01
相关资源
最近更新 更多