17 Stimmen

Behandeln die Stylesheets von Qt wirklich _dynamische_ Eigenschaften?

Sind die dynamischen Eigenschaften von Qt mit Stylesheets wirklich so dynamisch?

Ich habe das grundlegende Beispiel von Stylesheets und dynamischen Eigenschaften:

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

Und ich habe dies zur Laufzeit irgendwo im Code geschehen:

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

In der Benutzeroberfläche ändert sich nichts, wenn diese Eigenschaft zur Laufzeit geändert wird.

Hat jemand Ideen, was getan werden muss, um Qt's Stylesheet-Engine zu aktualisieren, wenn Eigenschaften ändern, oder ist es sogar in der Lage, diese Art von Fällen zu behandeln?

Übrigens: Ich verwende Qt 4.4

20voto

Jason Punkte 903

Qt hat die folgende Empfehlung in seinem FAQ :

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

Sie sagen auch, dass Sie das Stylesheet zurücksetzen können, indem Sie Folgendes tun, aber das ist teurer:

setStyleSheet(styleSheet());

6voto

mdcl Punkte 239

Ich habe einen schnellen, wenn auch etwas umständlichen Weg gefunden, die Gestaltung des Widgets zu aktualisieren.

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

Wenn Sie dies nach dem Ändern von Eigenschaften tun, bleibt die Korrelation zwischen den Eigenschaftsdaten und der Benutzeroberfläche erhalten.

3voto

Ton van den Heuvel Punkte 9567

Um eine ordnungsgemäße Neugestaltung des Widgets zu gewährleisten, funktioniert bei mir Folgendes:

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

Das Erzwingen einer Neuberechnung der Stylesheets, wie von mdcl vorgeschlagen, hat bei mir nicht funktioniert. Ich verwende Qt 4.5.3.

2voto

swongu Punkte 2179

Ich habe das auch versucht, ohne Erfolg, und als ich den folgenden Text in der Dokumentation fand, gab ich auf. Siehe Die Stylesheet-Syntax :

Warnung: Wenn sich der Wert der Qt Eigenschaft ändert, nachdem die Stilvorlage gesetzt wurde, kann es notwendig sein, eine eine Neuberechnung der Stilvorlage zu erzwingen. Eine Weg, dies zu erreichen, ist, die Stilvorlage Stilvorlage aufzuheben und neu zu setzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X