Seite 1 von 1

QPixmap oder Bilder wechseln

Verfasst: 14. Juni 2006 10:33
von ConcordeLord
Hallo,
habe ein kleines Problem, wahrscheinlich mal wieder mit dem SIGNAL-SLOT Mechanismus.
Will in meine Applikation eine Art Statusabfrage einbauen.
Der Einfachheit halber hab ich das erstmal mit Buttons probiert.
Das Bild habe ich in ein Label geladen. Nun soll bei Drücken des Buttons das Bild im Label geändert werden. Sozusagen der Status von OK auf Error oder umgedreht.

Hab mir den SIGNAL-SLOT so überlegt:
ist strak abstrahiert!!!

connect(Button, SIGNAL(clicked()), Label, SIGNAL(setPixmap(.."Ordner/Datei.*")));

Übersetzt wird alles richtig, es kommt keine Fehlermeldung, nur beim Drücken der Buttons wird das bild nicht geändert.

Habt ihr irgendwelche Ideen?

THX

Verfasst: 14. Juni 2006 10:39
von hypolit
Müßte es nicht:

connect(Button, SIGNAL(clicked()), Label, SLOT(setPixmap(.."Ordner/Datei.*")));

heißen?

Verfasst: 14. Juni 2006 10:50
von Christian81
im Slot können keine Parameter übergeben werden - wie sollte das funktionieren?

Verfasst: 14. Juni 2006 10:52
von uhu01
Hy!

Ja, du kannst keine Konstanten übergeben per Slot.
Du musst entweder ein passendes Signal finden das die Daten übergibt die der Slot benötigt, oder ein solches Signal selbst Programmieren, oder einen Slot Programmieren der ein Signal auslöst wie du es benötigst.

Je nach dem was leichter/passender ist.

mfg
uhu01

Verfasst: 14. Juni 2006 11:00
von BartSimpson
und bei einem label must du noch ein processEvents nachschieben!!
Oder du installidert ein Eventfilter:)

Verfasst: 14. Juni 2006 11:48
von macman
BartSimpson hat geschrieben:und bei einem label must du noch ein processEvents nachschieben!!
Wieso das denn? Ein Button emitiert ein Signal und der passende Slot ersetzt das Pixmap. Mehr braucht es da nicht.

Verfasst: 14. Juni 2006 12:03
von BartSimpson
Wirts ja sehen.:)
das selbe wenn du bei einem QLabel den text später ändern möchtest.

Verfasst: 14. Juni 2006 13:33
von macman
Zufällig hab ich das diese Woche erst programmiert. Ein Klick auf einen Button vertauscht die Pixmaps und ToolTips von zwei QLabel. Ohne processEvents :-) Vertauschen ist vielleicht zuviel gesagt, es werden Pixmaps und Texte gesetzt.

Verfasst: 14. Juni 2006 14:00
von ConcordeLord
Genau das will ich machen, in einem Label die Bilder ersetzen, aber der machts einfach nicht. Ist ja eigentlich auch nur zum Testen, aber wenigstens das sollte funktionieren. Könnte mir noch jemand n Tipp zum Signal-Slot geben, oder auf was ich noch gucken müsste.
Ist meine Vermutung denn richtig, dass nach dem "setPixmap("../Ordner/Datei.*") stehen muss?

THX

Verfasst: 14. Juni 2006 14:54
von macman
Also ich habe in meiner Klasse für die Pixmaps Membervariablen angelegt:
QPixmap pmBild1;
QPixmap pmBild2;

im Konstruktor definiere ich die dann (Bilder in der Resource):
pmBild1 = QPixmap(QString::fromUtf8(":/images/32x32/Bild1.png"));
pmBild2 = QPixmap(QString::fromUtf8(":/images/32x32/Bild2.png"));

Die Reihenfolge der Pixmaps, bei mir sind es mehr als 2, steht in einer QList. Im Slot für den clicked vom Button wird die Reihefolge in der QList geändert und danach eine Methode aufgerufen, die die QList abarbeitet und per switch werden dann Pixmap und Text zugewiesen:
label->setPixmap(pmBild1);
label->setToolTip(tr("Bild1"));