2011-01-09 15 views
5

Ich möchte die Titelleiste eines QMdiSubWindow anpassen. Dafür verwende ich ein qss.Wie kann ich die Titelleiste eines QMdiSubWindow mit qss anpassen?

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

Das Problem ist, wenn dieses qss angewendet wird, verschwinden die Fenstersymbole. Ich weiß, es ist möglich, diese Symbole in qss für eine QDockWidget

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

zu definieren, aber ich nicht einen Weg zu definieren, es für einen QMdiSubWindow finden. Vielleicht existiert dieser Weg nicht. Wissen Sie, ob es möglich ist?

+0

Dies ist ein Problem seit vielen Jahren. Gibt es Workarounds, um MDI-Childs zu formatieren? – cytrinox

Antwort

1

Ab Qt 5.2 können Sie nicht; habe nicht 5.3 überprüft aber AFAIK haben sie nichts in der QMdiArea/QMdiSubWindow in der 5.3 Freigabe geändert.

Die einfachste Lösung, die Sie haben, ist QCommonStyle und malen Sie die Titelleiste mit QPainter. Weitere Informationen hierzu finden Sie in den Dokumentationen QCommonStyle und QStyle. Bitte beachten Sie, dass es empfohlen wird, QCommonStyle und nicht QStyle für Ihre Stilklasse abzuleiten. QCommonStyle erbt QStyle, damit Sie nichts verlieren.

Und wenn Sie komplexere Effekte wie Schlagschatten auf dem Unterfenster dann der einzige Option, die Sie verlassen haben, hier zu erreichen, sind QMdiSubWindow und QMdiArea abzuleiten, rufen QWidget::setWindowFlags(Qt::FramelessWindowHintflag) auf die QMdiSubWindow abgeleiteten Klasse und implementieren von Grunde auf Ihre eigene Subwindow mit Ihrer eigenen Titelleiste. Sie können dann Ihre eigenen Q_PROPERTY s des Typs QColor definieren und auf diese von QSS wie ausgesetzt here zugreifen, um Titelleistenfarben von QSS anzupassen.

Eine andere Option wäre, ein neues MDI-Bereichs-Widget von Grund auf neu zu erstellen, aber ich denke nicht, dass dies in Ihrem Fall anwendbar wäre. Wenn Sie nur die Titelleiste mit einem benutzerdefinierten Stil anpassen möchten, ist der beste Ansatz, den Sie angehen können. Wenn in Schwierigkeiten, könnte Beispiele als Bearbeitung für diesen Beitrag zur Verfügung gestellt werden.

Aber wenn Sie den Standard QMdiSubWindow mit nur QSS anpassen möchten, ist es leider im Moment nicht möglich.

+1

Scheint eine gute Lösung zu sein, danke. – cytrinox