QPixmap + Qt::KeepAspectRatio

Alles rund um die Programmierung mit Qt
Antworten
iaby
Beiträge: 53
Registriert: 10. Februar 2007 13:12

QPixmap + Qt::KeepAspectRatio

Beitrag 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
iaby
Beiträge: 53
Registriert: 10. Februar 2007 13:12

Beitrag 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?
iaby
Beiträge: 53
Registriert: 10. Februar 2007 13:12

Beitrag 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
Antworten