7

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

QMdiSubWindow { border: 1px solid #000000; background: #000000 }
QMdiSubWindow:title { background: #000000 }

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

QDockWidget { ... titlebar-close-icon: url(myCloseIcon.png); ... }

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

4

1 回答 1

2

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

您拥有的最简单的解决方案是QCommonStyle使用QPainter. 有关这方面的更多信息,请参阅QCommonStyleQStyle文档。请注意,建议派生QCommonStyle而不是QStyle您的样式类。QCommonStyle继承QStyle所以你不会丢失任何东西。

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

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

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

于 2014-12-30T23:46:39.693 回答