Button mit Icon

Alles rund um die Programmierung mit Qt
Antworten
psiems
Beiträge: 6
Registriert: 29. November 2005 08:54

Button mit Icon

Beitrag von psiems »

Moin Forum!

Ich moechte einen Knopf in meine Qt-Anwendung integrieren, der statt eines Textes ein Bild traegt. Zusaetzlich soll er keinen(!) Rahmen haben.

Nun stellt sich mir folgendes Problem:

Einem QPushButton kann ich die Eigenschaft setFlat uebergeben, bekomme aber als Icon nur ein winziges Bildchen zu sehen.

Einem QToolButton kann ich ein Icon übergeben, das auch in gewuenschter Groesse angezeigt wird; leider kennt dieser jedoch nicht die setFlat-Methode.

CodeSnippet:

QPixmap pmap("bild.jpg");
pmap = pmap.scaledToHeight(200);

QPushButton *knopf = new QPushButton(this);
knopf->setFlat(true);
knopf->setGeometry(100,100,200,200);
knopf->setIcon(pmap);
knopf->setIconSize(QSize(200,200));

Was mache ich falsch?
Wie erstelle ich einen QToolButton ohne Rand?
Fuer einen produktiven Tip bin ich sehr dankbar!

Einen Gruss aus dem sonnigen Ostfriesland,

Philipp
Esleborn
Beiträge: 265
Registriert: 27. Januar 2005 01:23
Wohnort: Baden-Würtenberg
Kontaktdaten:

Beitrag von Esleborn »

wie wär's wenn du ein QToolButton machst, der durchsichtig ist, abgesehen vom Text und Icon natürlich...

Falls du es nicht weiß, steht hier wie das leicht geht...
Glaube an eine Lösung, nur dann kannst du auch eine finden.
psiems
Beiträge: 6
Registriert: 29. November 2005 08:54

Beitrag von psiems »

WoW!

Vier Stunden Doppelkopf und 5 Liter Wein lassen mich keine sinnvolle Antwort mehr erstellen. Dennoch danke fuer den Tip. Ich haette mir zwar eine einfachere Loesung gewuenscht (setzte doch einfach den QToolbutton auf setFlat(true)), dennoch werde ich morgen im nuechternen Zustand deine Idee versuchen zu realisieren.

<drunken>
warum zeigt der QPushButton Icons nur mit 16x16 Pixeln an???
</drunken>

Danke schon mal,

Gruss aus dem Fiesenland,

Philipp
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

psiems hat geschrieben:warum zeigt der QPushButton Icons nur mit 16x16 Pixeln an???
Tut er gar nicht. Du kannst beliebig große Icons in einen Pushbutton packen.

Code: Alles auswählen

	pushButton->setIcon(QPixmap(":icon.xpm"));
	pushButton->setIconSize(QSize(32, 32));
psiems
Beiträge: 6
Registriert: 29. November 2005 08:54

Beitrag von psiems »

Moin macman!

Genau das klappt leider nicht (siehe obigen Codeausschnitt). Ich erzeuge zwar eine Pixmap aus einem jpg, aber Pixmap sollte doch gleich Pixmap sein - egal ob aus jpg oder xpm erstellt. Oder?

Jedenfalls bekomme ich mit diesem Ansatz nur mini-Icons mit 16x16 Pixeln angezeigt. Eine Ueberpruefung mittels

qDebug() << knopf->iconSize();

gibt mir zwar die gewuenschte Groesse aus, aber die Darstellung wiederspricht den Zahlen...
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

psiems hat geschrieben:Ich erzeuge zwar eine Pixmap aus einem jpg, aber Pixmap sollte doch gleich Pixmap sein - egal ob aus jpg oder xpm erstellt. Oder?
Nein. Laut Doku gibt es keinen Konstruktor der QPixmaps aus jpgs erstellen kann. Nimm QIcon dafür und konvertiere das in ein QPixmap. Oder noch besser, mach gleich eine Resource daraus.
psiems
Beiträge: 6
Registriert: 29. November 2005 08:54

Beitrag von psiems »

Hallo nochmal!

Nach laengerer Zeit komme ich mal wieder zum Proggen, bleibe jedoch leider wieder an dem alten Problem stehen:

Mein QPushButton weigert sich standhaft, ein Bild groesser als 16 x 16 Pixel anzuzeigen.

Auf den Rat von MacMan habe ich zwei Wege versucht.

Zum einen habe ich ein QImage aus meinem jpg-Bild gemacht, daraus eine Pixmap erzeugt und diese dem Button zugewiesen.
Ergebnis: Icon ist 16 x 16 Pixel

Zum anderen habe ich genau die vorgeschlagenen Codezeilen

pushButton->setIcon(QPixmap(":icon.xpm"));
pushButton->setIconSize(QSize(32, 32));

uebernommen, um aus einem bereits vorhandenen xpm-Bild einen Button mit Icon zu erstellen.
Ergebnis: Icon ist 16 x 16 Pixel

Wo ist der Fehler???

Liegt es eventuell an meiner Qt-Version? Aktuell im Einsatz ist Qt 4.0.1 auf einem Macintosh - ein Qt-Fehler vielleicht? Obwohl ich eher den Fehler zwischen meinen Ohren vermute, lade ich mir mal die neue Version runter.

Wie funktioniert das mit der Icon-Engine? In der Doku steht sowas drin, das sie immer Pixmaps in MAXIMAL der gewuenschten Groesse rausgibt, sie koennen aber auch kleiner sein. Muss ich dieser Engine vielleicht etwas anderes mitteilen, gibt die standardmaessig nur 16 x 16 Pixel Pixmaps zurueck?

Fuer einen konstruktiven Hinweis waere ich echt dankbar!
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Beitrag von madRenEGadE »

ist dein button auch groß genug? ich weiß zwar nicht wie sich der button verhält wenn man ein größeres icon als die größe des buttons nimmt aba vielleicht liegt ja darin dein problem
psiems
Beiträge: 6
Registriert: 29. November 2005 08:54

Beitrag von psiems »

Jau, der Button ist gross genug. Egal, ob er kleiner, groesser oder gleich gross ist, das Ergebnis ist ein Mini.Icon mit 16 x 16 Pixeln.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

In den Change logs von Qt 4.1.1 steht unter Mac X:
- QPushButton
Make Mac style obey the icon size set by setIconSize().
Make sure buttons are not shown as default on inactive
windows.
ob es damit was zu tun hat???
psiems
Beiträge: 6
Registriert: 29. November 2005 08:54

geschafft

Beitrag von psiems »

Ist zwar bloede, aber nicht so schlimm:

Der Fehler liegt anscheinend nicht bei mir, sondern im MacStyle! Benutze ich fuer den QPushButton einen anderen Style (motif, win), klappt die Darstellung wie gewuenscht.

Danke allen fuer die Hinweise!

Gruss

Philipp
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Dann muste halt auf 4.1.0 erhöhen:)
Antworten