Seite 1 von 1

QPixmap + Qt::KeepAspectRatio

Verfasst: 20. Juli 2007 10:51
von iaby
Hallo zusammen,

ich benutze Qt v4.3.0 und es scheint mir so als ob Qt::KeepAspectRatio bei meinem QPixmap keinerlei Wirkung hat! Es verhält sich wie ein IgnoreAspectRatio !
Kann das irgend jemand bestätigen? KeepAspectRatioByExpanding funktioniert hingegen wieder!
Ist das ein Bug oder mach ich was falsch?

Code: Alles auswählen

*tmpPixmap = mapPixmap->scaled(width(), height(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
Gruß,
iaby

Verfasst: 21. Juli 2007 13:32
von iaby
Ich habe gerade festgestellt, dass das Pixmap doch richtig skaliert wird! Allerdings funktioniert dann wohl mein PaintEvent nicht richitg:

Code: Alles auswählen

void Map::paintEvent(QPaintEvent *event)
{
	QPainter painter(this);
	QVector<QRect> rects = event->region().rects();
	for (int i = 0; i < rects.count(); i++)
		painter.drawPixmap(rects[i], *tmpPixmap, rects[i]);
	painter.end();
}
Ich will das pixmap eigentlich nur 1:1 auf mein QWidget zeichnen. Unter Qt3 hat das mit bitblt auch einwandfrei funktioniert, bloß jetzt mit dem painter scheint da was schief zu gehen!?!
Hat da jemand vielleicht noch eine Idee für mich?

Verfasst: 24. Juli 2007 12:22
von iaby
Falls jemand mal ein ähnliches Problem haben sollte, so funktioniert es bei mir:

Code: Alles auswählen

void Map::paintEvent(QPaintEvent *event)
{
	QPainter painter(this);
	QVector<QRect> rects = event->region().rects();
	for (int i = 0; i < rects.count(); i++) {
		if (rects[i].width() > tmpPixmap->width())
			rects[i].setWidth(tmpPixmap->width());
		if (rects[i].height() > tmpPixmap->height())
			rects[i].setHeight(tmpPixmap->height());
		painter.drawPixmap(rects[i], *tmpPixmap, rects[i]);
	}
	painter.end();
}
Gruß vom Alleinunterhalter