2009-10-20 4 views
17

Les propriétés dynamiques de Qt sont-elles si dynamiques avec les feuilles de style?Les feuilles de style de Qt gèrent-elles réellement les propriétés _dynamic_?

je l'exemple de base de feuilles de style et les propriétés dynamiques:

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

Et je ce qui se passe à l'exécution quelque part dans le code:

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

Rien ne change dans l'interface utilisateur, lorsque cette propriété est changé à l'exécution.

Est-ce que quelqu'un a des idées sur ce qu'il faut faire pour mettre à jour le moteur de feuille de style de Qt lors du changement de propriétés, ou est-il capable de gérer ce genre de cas?

Btw. J'utilise Qt 4.4

+0

Peut-être que vous en avez besoin d'être une Q_PROPERTY? – cheez

Répondre

6

J'ai trouvé un moyen rapide, quoique un peu hack, de mettre à jour le style du widget. Cette opération après modification des propriétés conserve la corrélation entre les données de propriété et l'interface utilisateur.

+0

Cela n'a pas fonctionné pour moi avec PyQt 4.7.2 (Qt 4.6.2) La suggestion de Ton van den Heuvel a fait cependant. –

+0

Cela fonctionne pour moi! Je cours Qt 4.7 et les changements à la propriété "enabled" par l'intermédiaire de 'QWidget :: setEnabled (bool)' ne changeaient pas l'aspect du widget via le '[enabled =" false "]' et '[enabled = "true"] 'sections dans la feuille de style. L'utilisation de ce qui précède a fonctionné comme un charme. Je les ai simplement enveloppés dans une fonction 'rePolish (QWidget *)' et ai appelé des appels à cette fonction dans mon code partout où l'état activé a changé. – kurige

+1

En note: Celui qui a déprécié la réponse ci-dessus ... "Ça ne marche pas pour moi" n'est généralement pas une bonne raison de baisser la note. – kurige

2

J'ai essayé cela aussi sans aucune chance, et quand j'ai trouvé le texte suivant dans la documentation, j'ai abandonné. Voir The Style Sheet Syntax:

Attention: Si la valeur des changements de propriété Qt après la feuille de style a été défini, il peut être nécessaire de vigueur une feuille de style recalcul. Un moyen pour y parvenir consiste à mettre à 0 la feuille de style et à la définir à nouveau.

3

Les travaux suivants pour moi afin d'assurer une bonne restyling du widget:

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

Obliger un recalcul des feuilles de style tel que proposé par MDCL ne fonctionnait pas pour moi. J'utilise Qt 4.5.3.

+0

Cela a fonctionné avec PyQt 4.7.2 (Qt 4.6.2). Une vraie honte que ce truc ne fonctionne pas si bien. Vous devriez pouvoir appeler simplement EnsurePolished() et en avoir terminé avec. –

18

Qt a la recommandation suivante dans leur FAQ:

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

Ils disent aussi que vous pouvez réinitialiser la feuille de style en procédant comme suit, mais il est plus cher:

setStyleSheet(styleSheet()); 
Questions connexes