Seite 1 von 1

Style Sheets: Nur QAction von QMenu manipulieren

Verfasst: Donnerstag 3. Mai 2018, 19:06
von Sophus
Hallo Leute,

ich weiß, dass CSS nicht wirklich zu Python gehört. Aber da man im Zusammenhang mit Qt auch mit CSS arbeiten kann, versuche ich mal mein Glück. Nun, wie man QMenu() mittels CSS anspricht weiß ich. Sieht ungefähr so aus:

[codebox=css file=Unbenannt.css]
QMenu[objectName="context_menu_master_data"]
{
background:red;
}
[/code]

Aber wie spreche ich QAction() an? Konkret geht es mir darum, dass ich Icons anfügen will. Man könnte über QDesigner oder auch über PyQt alles erledigen. Die Sache ist nur, dass ich meine GUI dynamischer halten will. Denn mein derzeitiges Programm lädt die *.qss-Datei. Und dort möchte ich nahe zu alles festlegen. Je nach Theme ändern sich nicht nur die Farben auf den QWidgets, sondern auch die Icons.

Hat jemand eine Idee, wie ich dies bewältigen kann?

Re: Style Sheets: Nur QAction von QMenu manipulieren

Verfasst: Mittwoch 9. Mai 2018, 12:42
von jerch
@Sophus:
Gar nicht. QAction kann man nicht stylen, da es kein Widget ist sondern nur eine Aktion repräsentiert. Um da was zu stylen, müsstest Du an diekt an das Widget ran, was die Aktion darstellt. Das gelingt leider nicht immer, weil es für bestimmte Menüs nicht von Qt sondern vom OS kontrolliert wird. Probieren kannst Du noch QWidgetAction, überall wo Du das verwenden kannst, kannst Du auch stylen, weil Qt fürs Zeichnen verantwortlich ist.

Wenn es Dir nur ums Icon geht - explizit im Code setzen. Aber Obacht - überall dort, wo Qt nicht fürs Zeichnen verantwortlich ist, könnte der User Icons deaktiviert haben (kA ob das in allen gängigen OS konfigurierbar ist).

Re: Style Sheets: Nur QAction von QMenu manipulieren

Verfasst: Mittwoch 9. Mai 2018, 17:25
von Sophus
@jerch: Das ist wirklich ärgerlich. Dann blächt sich der Quelltext unnötig auf. Denn je nach Theme muss das Icon auch gewechselt werden. Wäre ja irrsinnig, wenn die Widget einen sehr dunklen Hintergrund haben und die Icons schwarz sind. Das heißt für mich, ich muss jedesmal abfragen, welches Theme verwendet wird und dann ensprechend mit PyQt steuern. Verdammt. Ich wollte diesen Teil in CSS verbannen, damit der Quelltext weitestgehend sauber bleibt und nicht aufgebläht wird.

Re: Style Sheets: Nur QAction von QMenu manipulieren

Verfasst: Mittwoch 9. Mai 2018, 19:56
von __deets__
Wenn du das willst, stell um auf electron. Dann hast du alle Möglichkeiten von HTML/CSS.

Re: Style Sheets: Nur QAction von QMenu manipulieren

Verfasst: Freitag 11. Mai 2018, 20:47
von jerch
@Sophus:
Naja, Du kannst das immernoch halbwegs schick wegabstrahieren, z.B. mit theme-Ordnern, wo die Icons immer dem gleichen Pfad gehorchen. Dann musst Du nicht zig conditions abfragen/setzen, sondern nur einmal das Theme setzen und greifst dann immer auf den Subpfad zu.

Re: Style Sheets: Nur QAction von QMenu manipulieren

Verfasst: Montag 21. Mai 2018, 22:26
von Sophus
@jerch: Deine Idee klingt plausibel. Ich stoße gerade auch bei QMessageBox an. Über QMessageBox kann man ja eigene Icons verwenden und auf die Standard-Icons gänzlich verzichten. Aber mittels CSS ist es mir nicht mal möglich, auch dort die Icons zu steuern. Mir scheint allgemein so, dass QT nur halbherzig CSS unterstützt. Kann das sein?

Re: Style Sheets: Nur QAction von QMenu manipulieren

Verfasst: Donnerstag 31. Mai 2018, 21:00
von jerch
@Sophus
Die Einschätzung ist etwas ungerecht, da CSS zur Gestaltung von HTML entwickelt wurde, eine QT-Oberfläche aber fest nichts gemein hat mit HTML Inhalten. Daher ist es logisch das QT "CSS" nicht unterstützt, man sollte die Gestaltungsmöglichkeiten eher als syntaktisch analoge Entwicklung verstehen.

Re: Style Sheets: Nur QAction von QMenu manipulieren

Verfasst: Donnerstag 31. Mai 2018, 21:15
von __deets__
Hmjanee. Das ginge schon durchaus alles Bzw deutlich mehr, aber da fehlt es an Konsequenz. Nicht umsonst wurde das QML stylesheet Plugin meines Kollegen Gregor mit einem Preis bedacht auf einer Qt Konferenz - weil die das trotz neuer und eigentlich dazu geeigneter Technologie nicht von Anfang an vorgesehen haben.

Und angesichts der modernen HTML GUIs ist klar, das die Technik das prinzipiell bringt. Muss Sophus halt auf Electron umstellen :)