Qt: von Style verwendete Farben ermitteln



  • Hallo,
    ich habe in einem Programm die Möglichkeit der Nutzung von Styles und Stylesheets integriert. Wenn ich nun wissen möchte, wie die Schriftfarbe eines Buttons aussieht, wie kann ich dies abfragen? Die QPalette wird komplett ignoriert und nützt daher nichts.

    Ich dachte, dass

    QStyle * style = qApp->style();
    style->styleHint(...);
    

    helfen könnte, finde aber keinen Weg, an die Farben des verwendeten Styles zu kommen. Zur Not könnte ich auch Dummy-Objekte erzeugen und deren Farben irgendwie ermitteln, aber auch hier fehlt mir die richtige Idee.

    Falls mir jemand helfen kann, danke ich schonmal im Voraus.



  • Niemand eine Idee? Kann man denn irgendwie einen zum Programm gehörigen Pixel anschauen und dessen Farbe ermitteln?



  • QStyle sollte nix mit den Farben zu tun haben ...
    Das farbschema deines WindowManagers sollte deine Farben bestimmen, nicht der Style. Der bestimmt nur, welche Frabeintrag aus der Palette zum zeichnen von welchen Element benutzt wird.

    Deshalb, schau dir QPalette an ... Da bekommst beim EInsprung in dein Programm eine entsprechend dem WIndowsManager definierte verpasst, die kannst beliebig modifizieren ....
    Die wird mit der hirarchie kopiert ....

    Ciao ...



  • Das Modifizieren der QPalette gibt nicht genügend Spielraum. Mit etwa einem Dutzend Farben ist ein halbwegs ansehnlicher Mix sehr schwer zu erreichen. Zudem ignorieren manche Styles bestimmte Farb-"Rollen".

    Ich hatte zuvor im Programm die QPalette genutzt um das Aussehen zu ändern. Aber das Ergebnis ist einfach nicht zufriedenstellend gewesen.

    Wenn der Style nicht weiß, welche Farben tatsächlich verwendet werden, wer dann? Gibt es irgendeine Möglichkeit, aus einem Style ein Stylesheet zu generieren?

    Nachtrag: Ich habe das ganze jetzt aufgegeben, hilft ja nichts. Falls jemand noch eine nette Lösung findet, kann er sie ja trotzdem preisgeben.



  • Im Rahmen weiterer Nachforschungen habe ich folgendes herausgefunden:

    a) Die vom Programm tatsächlich zur Darstellung verwendete Palette kann beliebig von der im Style oder auch dem ganzen Programm abweichen.

    b) Die tatsächliche Palette lässt sich ermitteln. Erste Versuche meinerseits zeigen, dass

    QStyleOptionViewItem o;
    o.palette();
    

    sehr gute Ergebnisse liefert. Damit weiß ich zwar noch nicht, wo die intern verwendete Palette selbst zu finden ist, aber über diesen Umweg kann man zumindest auf die wichtigen Teile der Palette zugreifen.


Log in to reply