2009-10-20 7 views
17

¿Las propiedades dinámicas de Qt son realmente tan dinámicas con las hojas de estilo?¿Las hojas de estilos de Qt realmente manejan las propiedades _dynamic_?

tengo el ejemplo básico de hojas de estilo y propiedades dinámicas:

/*stylesheet:*/ 
*[field_mandatory="true"] { background-color: "yellow";} 

Y tengo que esto ocurra en tiempo de ejecución en alguna parte del código:

/*code:*/ 
myWidget->setProperty("field_mandatory", field->isFilled()); 

Nada cambia en la interfaz de usuario, cuando esta propiedad es cambiado en tiempo de ejecución.

¿Alguien tiene ideas de lo que se debe hacer para actualizar el motor de la hoja de estilos de Qt al cambiar las propiedades, o incluso es capaz de manejar este tipo de casos?

BTW. Estoy usando Qt 4.4

+0

Tal vez usted necesita que sea ¿Q_PROPERTY? – cheez

Respuesta

6

Encontré una manera rápida, aunque un poco hackosa, de actualizar el estilo de los widgets.

myWidget->style()->unpolish(myWidget); 
myWidget->ensurePolished(); 

Hacer esto después de cambiar las propiedades mantiene la correlación entre los datos de propiedad y la IU.

+0

Esto no funcionó para mí con PyQt 4.7.2 (Qt 4.6.2) Aunque la sugerencia de Ton van den Heuvel sí lo hizo. –

+0

¡Esto funciona para mí! Estoy ejecutando Qt 4.7 y los cambios en la propiedad "habilitada" a través de 'QWidget :: setEnabled (bool)' no cambiaron el aspecto del widget a través del correspondiente '[enabled =" false "]' y '[enabled = "verdadero"] 'secciones en la hoja de estilo. Usar lo anterior funcionó como un amuleto. Acabo de envolverlos en una función 'rePolish (QWidget *)' y salpicado de llamadas a esa función en todo mi código dondequiera que cambie el estado habilitado. – kurige

+1

Como nota al margen: Quien rechazó la respuesta anterior ... "No funciona para mí" generalmente no es una razón lo suficientemente buena para rechazarla. – kurige

2

Intenté esto también sin suerte, y cuando encontré el siguiente texto en la documentación, me di por vencido. Ver The Style Sheet Syntax:

Advertencia: Si el valor de las Qt cambios en las propiedades después de la hoja de estilo se ha establecido, podría ser necesario un recálculo fuerza de hoja de estilo. Una forma de lograr esto es desarmar la hoja de estilo y volver a configurarla.

3

las siguientes obras para mí para asegurar una adecuada restyling del widget:

myWidget->setStyle(QApplication::style())

forzar un recálculo de las hojas de estilo según lo propuesto por LMDC no funcionó para mí. Estoy usando Qt 4.5.3.

+0

Esto funcionó para mí usando PyQt 4.7.2 (Qt 4.6.2). Una verdadera lástima que estas cosas no funcionen tan bien. Debería poder simplemente llamar a ensurePolished() y terminarlo. –

18

Qt tiene la siguiente recomendación en su FAQ:

style()->unpolish(theWidget); 
style()->polish(theWidget); 

También dicen que puede restablecer la hoja de estilo de la siguiente manera, pero es más caro:

setStyleSheet(styleSheet()); 
Cuestiones relacionadas