2017-08-18 3 views
0

Verwenden von Stylesheets Ich versuche, den Stil eines Fensters zu ändern, einschließlich aller untergeordneten Elemente.Erzwingen einer Neuberechnung von Qt Stylesheet scheint nichts zu tun

Alle untergeordneten Elemente werden mit setObjectName benannt und das Stylesheet verwendet den gleichen Namen, um den Stil der benannten Widgets zu ändern (sowie einige Extrakte, die nie geändert werden müssen). Ich aktualisiere das Stylesheet neu, indem ich zuerst Werte in eine std::map einfüge und Namen wie QWidget#hello!hover einem Satz von Schlüssel/Wert-Paaren wie background-color bis #0f0f0f zuweise. I.e. ["QWidget#hello!hover"]["background-color"] = "#0f0f0f", wäre ein Eintrag.

Wenn das Stylesheet Karte geändert wird, ich das gesamte Stylesheet neu berechnen und setzen Sie ihn setStyleSheet auf dem Haupt-Widget verwenden, /* */ an der Spitze Zugabe (angeblich soll diese eine Neuberechnung des Sheet erzwingen). Dies scheint jedoch überhaupt nichts zu tun.

Dies geschieht im Konstruktor des Haupt-Widget funktioniert gut, aber tut nichts, wenn es erst einmal festgelegt wurde.

Das Stylesheet, das ich berechne, ist gültig und alle Einträge sind so angeordnet, wie ich es erwarte, alle Widgets haben die erwarteten Namen und da es beim ersten Mal funktioniert, vermute ich, dass das Problem auch das ist Das neue Stylesheet hat keine Wirkung oder es hat einfach keine Auswirkung auf die Kinder.

Ich bin mit Qt 5.4 (alte Scheiß Mist Software, die für Qt3 ursprünglich entwickelt wird) auf Windows 10.

Wie kann ich dieses Problem beheben?

+0

Es ist schwer, ohne genaue Beispiele zu sagen, aber. 1) Versuchen Sie, den "Fusion" -Stil standardmäßig zu verwenden. 2) Um das Stylesheet "neu zu laden", müssen Sie 'w-> polish(); w-> unpolish();' aufrufen, ohne ein Stylesheet zurückzusetzen. 3) Dein CSS sieht wirklich komisch aus. Ist es ein Pseudo-Code? –

+0

@DmitrySazonov Wenn das Problem behoben wurde, indem Sie das Stylesheet auf alle untergeordneten Elemente setzen. – Clearer

Antwort

0

Ich habe das Problem behoben, indem ich das Stylesheet auf alle untergeordneten Elemente des Hauptwidgets gesetzt habe. Nach dem neuen Stylesheet zu berechnen und sie in einem QString speichern, namens stylesheet, benutzen ich:

QList<QWidget*> children = findChildren<QWidget*>(); 
for (QList<QWidget*>::iterator child = children.begin(); child != children.end(); ++child); 
    (*child)->setStyleSheet(stylesheet); 

und alles wie ein Charme. Die Änderungen sind sehr selten und es gibt nicht viele Dinge im Fenster, so dass die Kosten dafür nicht so groß sind - ich bin mir sicher, dass es effizienter gemacht werden kann.

Verwandte Themen