Seite 1 von 1

QPixmap auf QLabel vergrößern/zoomen ?!

Verfasst: 14. Januar 2009 22:12
von wojtek85
Hallo,

habe ein QLabel, darauf lege ich eine QPixmap die ich mit einem QPainter bemale. Nun moechte ich eine Zoom-Funktion einbauen. Mein Vorgehen:
1) QLabel auf die neue Groesse aendern
2) QPixmap vergroessern
3) Painter skalieren

Punkte 1) und 3) sind kein Problem, aber wie bekomme ich die Pixmap groesser (und wieder auf dem Label angezeigt, wobei das klappt glaube ich). Habe versucht die Methode pixmap->scaled(x,y, aspectRatio, trafoMode) aufzurufen, aber da kommt der Fehler "QPixmap::operator=: Cannot assign to pixmap during painting". Hab schon in der Doku und hier im Forum nach anderen Loesungen gesucht, aber bisher nichts nuetzliches gefunden.

Hier ein Stueck Code fuer ZoomIn:

Code: Alles auswählen

1) Label:   pixmapLabel->setFixedSize(ceil(pixmapLabel->size().width()*1.1), ceil(pixmapLabel->size().height()*1.1));

2) Pixmap:   paintArea = paintArea->scaled(value, value, Qt::KeepAspectRatio, Qt::FastTransformation);

3) Painter:   painter->scale(1.1, 1.1);
Wie gesagt, Label wird schoen vergroessert, Painter skaliert aber leider bleibt die Pixmap gleich. Hat jemand eine Idee oder einen guten Tipp?

Danke. Gruss, Wojtek

Verfasst: 14. Januar 2009 22:59
von Christian81
Dafür gibts QLabel::setScaledContents ()

Verfasst: 14. Januar 2009 23:28
von wojtek85
Das funktioniert ganz gut, allerdings sieht das nicht so gestochen scharf aus, wie bei einem erneuten Zeichen mit skaliertem Painter, wo ich wieder bei meinem Ausgangsproblem waere, dass die Pixmap das Label nicht ausfuellt, trotz gleicher Groesse... dafuer waere eine Loesung ganz gut.

Verfasst: 15. Januar 2009 08:58
von Christian81
Dann würde ich wohl am ehesten das resize-Event überschreiben und dort das Pixmap skalieren und neu setzen.