QPushButton / Icons

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Hallo Leute,
hoffentlich kennt jemand hier im Forum das Problem.

Laut Qt Dokumentation lassen sich für einen QPushButton verschiedene Icons je nach State und Mode festlegen. Da scheint es aber entweder einen Bug zu geben oder ich verwende es falsch. Letzteres wäre mir lieber. :wink:

Bespiel:
Der Button hat im Normalzustand ein weißes Fragezeichen als Icon. Nun soll das Icon im Zustand "pressed" ein blaues Fragezeichen sein. Und im Zustand "released" wieder zurück zum weißen Icon.

Leider nimmt der Button niemals ein anderes Icon an, er zeigt egal in welchem Zustand und egal ob Mode On/Off immer das Bild mit dem weißen Fragezeichen. Lediglich, wenn ich den Button auf checkable(true) setze, dann zeigt er im Zustand "checked" das blaue Icon an.
Das Problem: Der Button darf kein checkable Button sein, ich brauche einen ganz normalen.

Leider bekomme ich das gewünschte Ergebnis nicht mal im Designer hin. Ich habe dort aus lauter Irrsinn sogar mal für alle Zustände und Modi ganz unterschiedliche Bilder vergeben, aber es wird nie das gewünschte Resultat erzeugt.

Kennt jemand das Verhalten? Oder anders gefragt, hat schon mal jemand das Resultat erfolgreich erzeugt, das ich hier erreichen will?
Bin für jeden Hinweis dankbar!

Beste Grüße,
~Mad
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kannst du mal die entsprechende Doku verlinken? Und auch ein bisschen Code zeigen? Ich finde gerade nicht zu Icons in QPushButton (ausser zu Window-Icons, aber das hat damit nichts zu tun).
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Doku zu QPushButton:
http://doc.qt.io/qt-5/qpushbutton.html
Doku zu QIcon:
http://doc.qt.io/qt-5/qicon.html

Ich hab nichts Außergewöhnliches versucht, lediglich die Methode AddFile benutzt.
http://doc.qt.io/qt-5/qicon.html#addFile

Ich füge einfach Bilder von der lokalen Platte zu meinem QIcon-Objekt und setze die Modi und States entsprechend. Die Bilder werden gefunden also die Datei-Pfade sind valide. Nur erreiche ich, egal in welcher wilden Konstellation, niemals das gewünschte Verhalten des Buttons.

normal: weißes Icon
pressed: blaues Icon
released: weißes Icon
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Madmartigan:
Die Zustände, welche Du abbilden willst, sind nicht in QIcon::Mode und QIcon::State enthalten. Daher funktioniert das nicht. Z.B. ändert er das Pixmap bei enable/disable oder focus-in/out.

An Deine Zustände kommst Du mit Stylesheets ran (QPushButton::pressed {background-image:url(...)}), oder halt klassisch per Signal/Slot im Code.
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Hi jerch,
danke für deine Antwort.

Ich will natürlich vermeiden, für jeden Button ein separates StyleSheet definieren zu müssen. Ich verstehe nicht ganz, wieso dieses Standard-Verhalten eines Buttons von Qt nicht abgebildet wird. Ein separates Icon für Checked ist ja möglich, für Pressed allerdings nicht.

Nunja, meine Lösung war nun eine eigene Button-Klasse zu erstellen, die von QPushButton erbt und die entsprechende Icon-Funktionalität implementiert.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Madmartigan:
Von C++ herkommend ist Qt manchmal recht ableitungs-/vererbungslastig. Ich hätts wahrscheinlich auch mit einem eigenen Typen gelöst.
Antworten