如何使用qss自定义QMdiSubWindow的标题栏?

dev*_*Box 5 qt mdichild stylesheet

我想自定义QMdiSubWindow的标题栏.为此,我使用qss.

QMdiSubWindow { border: 1px solid #000000; background: #000000 }
QMdiSubWindow:title { background: #000000 }
Run Code Online (Sandbox Code Playgroud)

问题是当应用此qss时,窗口图标消失.我知道可以在qss中为QDockWidget定义这些图标

QDockWidget { ... titlebar-close-icon: url(myCloseIcon.png); ... }
Run Code Online (Sandbox Code Playgroud)

但是我找不到为QMdiSubWindow定义它的方法.也许这种方式不存在.你知道这是否可能?

Iul*_*liu 2

至于Qt 5.2你不能;尚未检查5.3,但据我所知,他们没有更改版本中的任何QMdiArea/QMdiSubWindow内容5.3

最简单的解决方案是使用QCommonStyle并绘制标题栏QPainter。有关详细信息,请参阅QCommonStyleQStyle文档。请注意,建议派生QCommonStyle而不是QStyle为您的样式类。QCommonStyle继承,QStyle这样你就不会失去任何东西。

如果您想实现更复杂的效果,例如子窗口上的阴影,那么您剩下的唯一选择就是派生QMdiSubWindowQMdiArea,调用QWidget::setWindowFlags(Qt::FramelessWindowHintflag)派生QMdiSubWindow类并从头开始实现带有您自己的标题栏的您自己的子窗口。然后,您可以定义自己的Q_PROPERTY类型QColor并访问此处QSS公开的类型,以便自定义标题栏颜色。QSS

另一种选择是从头开始创建一个新的 MDI 区域小部件,但我认为这不适用于您的情况。如果您只需要使用自定义样式自定义标题栏,那么这是您可以解决的最佳方法。如果遇到麻烦,可以提供示例作为对本文的编辑。

QMdiSubWindow但如果您想仅使用来自定义标准QSS,不幸的是目前还不可能。