2011-01-09 9 views
5

Me gustaría personalizar la barra de título de una QMdiSubWindow. Para eso uso un qss.¿Cómo personalizar la barra de título de una QMdiSubWindow con qss?

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

El problema es que al aplicar este qss, los iconos de la ventana desaparecen. sé que es posible definir estos iconos en qss para un QDockWidget

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

Sin embargo no puedo encontrar una manera de definirlo para una QMdiSubWindow. Quizás esta forma no existe. ¿Sabes si es posible?

+0

Esto es un problema desde hace muchos años. ¿Hay alguna solución para el estilo de los niños con MDI? – cytrinox

Respuesta

1

A partir de Qt 5.2 no se puede; no han marcado 5.3 pero AFAIK no cambiaron nada en el QMdiArea/QMdiSubWindow en la versión 5.3.

La solución más fácil que tiene es usar QCommonStyle y pintar la barra de título usando QPainter. Para obtener más información sobre eso, consulte las documentaciones QCommonStyle y QStyle. Tenga en cuenta que se recomienda derivar QCommonStyle y no QStyle para su clase de estilo. QCommonStyle hereda QStyle por lo que no perderá nada.

Y si se quiere lograr efectos más complejos, como sombra en la ventana secundaria entonces la única opción que le queda aquí es para derivar QMdiSubWindow y QMdiArea, llame QWidget::setWindowFlags(Qt::FramelessWindowHintflag) en la clase derivada QMdiSubWindow e implementar desde cero su propio sub-ventana con tu propia barra de título. A continuación, puede definir su propio Q_PROPERTY del tipo QColor y acceder a los del QSS como expuesto here para personalizar los colores de la barra de título desde QSS.

Otra opción sería crear un nuevo widget de área MDI desde cero, pero no creo que esto sea aplicable en su caso. Si solo necesita personalizar la barra de título con un estilo personalizado, es el mejor enfoque que puede abordar. Si hay problemas, se pueden proporcionar ejemplos como edición de esta publicación.

Pero si quiere personalizar la estándar QMdiSubWindow usando tan solo QSS, lamentablemente no es posible por el momento.

+1

Parece ser una buena solución, gracias. – cytrinox

Cuestiones relacionadas