2011-01-09 1230 views
5

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

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

问题是,当应用这个qss时,窗口图标消失。 我知道这是可能的定义在QSS这些图标的QDockWidget

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

但是我无法找到一个方法来定义它为一个QMdiSubWindow。 也许这种方式不存在。 你知道这可能吗?

+0

这是多年以来的问题。是否有任何解决方法来设置MDI子选项? – cytrinox 2014-12-27 23:26:47

回答

1

截至Qt 5.2你不能;没有检查5.3,但AFAIK他们没有改变QMdiArea/QMdiSubWindow5.3版本中的任何内容。

最简单的解决方案是使用QCommonStyle并使用QPainter来绘制标题栏。有关更多信息,请参阅QCommonStyleQStyle文档。请注意,建议您为您的风格课程派生QCommonStyle而不是QStyleQCommonStyle继承QStyle所以你不会失去任何东西。

如果你想实现更复杂的效果,如在子窗口阴影,那么你已经离开了这里是推导QMdiSubWindowQMdiArea,呼吁QMdiSubWindow派生类QWidget::setWindowFlags(Qt::FramelessWindowHintflag)并从头开始自己的子窗口实现的唯一选择与你自己的标题栏。然后,您可以定义自己的Q_PROPERTY s类型QColor,并从QSS访问类似here的那些,以便从QSS自定义标题栏颜色。

另一种选择是从零开始创建一个新的MDI区域小部件,但我认为这不适用于您的情况。如果您只需要使用自定义样式自定义标题栏,那么您就可以解决这个问题。如果遇到麻烦,可以提供这个帖子的编辑。

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

+1

似乎是一个很好的解决方案,谢谢。 – cytrinox 2014-12-30 23:54:15