停靠

时间:2015-10-27 21:31:17

标签: c++ qt

我有QDockWidget

enter image description here

我想通过设置标题栏的背景颜色来提醒用户注意某些事件。

我通过设置DockWidget的样式表来实现这一目的:

void DockWidget::setCriticalAlert()
{
    setStyleSheet("QDockWidget { background-color:red; }");
}

结果如下:

enter image description here

问题是background-colorQDockWidget停靠时无法应用{/ p}}:

enter image description here

如何在QDockWidget停靠时获取背景颜色?

2 个答案:

答案 0 :(得分:1)

这是Qt中的一个错误。

Issue 10537

引用相关问题:

  

问题是在QDockWidget :: paintEvent中有一个   绘制PE_FrameDockWidget之前的isFloating()条件。我们不可以   jsut删除这个条件,因为它会打破其他风格(那   当dockwidget停靠时不会画框架)我们做不到   要么使用PE_Widget来绘制帧,那么它就会越过   dockwidget的标题解决方案可能是介绍一个新的   PE_FrameDockWidgetDocked原始元素。或者一些   SH_DockWidget_DrawDockedFrame样式提示在每个中绘制帧   例。

答案 1 :(得分:0)

有效的解决方法似乎是设置父级的样式表,并使用class-and-id选择器。原谅python格式的代码,但概念是相同的 - 在这种情况下,'dock'是一个QDockWidget,它使用setObjectName()给出了一个对象名,其父级QMainWindow是'self':

self.setStyleSheet("QDockWidget#"+str(dock.objectName())+"::title {background-color:red}")

在PyQt5.5中,这在运行时工作,即可以即时更改。