Seite 1 von 1

mehrere SVG auf einem QWidget

Verfasst: 24. Juni 2008 11:23
von joebar
Hallo,

ich habe ein QWidget (RenderArea genannt) auf dem ich ein SVG zeichne:

Code: Alles auswählen

void RenderArea::paintEvent(QPaintEvent * /* event */){
	QPainter painter(this);
	renderer -> render(&painter); // renderer ist ein QSvgRenderer Objekt
}
Funktioniert sehr schoen, wenn ich das Fenster vergroessere vergroessert sich das Bild mit.

Jetzt moechte ich mehrere Bilder auf diesem QWidget darstellen und sollen sich auch mit dem Fenster vergroessern. Ich habe:

Code: Alles auswählen

void RenderArea::paintEvent(QPaintEvent * /* event */){
                QRectF bounds(0,0,200,200);
	QPainter painter(this);
	renderer -> render(&painter,bounds);
	painter.translate(200,200);
	renderer -> render(&painter,bounds);
}
Durch die Angabe von bounds vergroessert sich jetzt das Bild nicht mit dem Fenster. Ich kann jetzt natuerlich ueber ein resize event die neue Fenstergroesse abfragen und mein bounds dynamisch anpassen. Das klingt aber nach viel Arbeit. Kann ich das irgendwie elegant hin bekommen? Einfach nur die bounds Angabe weglassen zeichnet mir die Bilder uebereinander.

Danke!

Verfasst: 24. Juni 2008 12:29
von upsala
Du mußt das resizeEvent nicht abfangen um jederzeit die Größe eines Widgets zu bekommen. Dafür gibt es ja z.B. width() und height().

Verfasst: 24. Juni 2008 13:40
von joebar
sprich ich mach die Berechnung im paint event mittels width() and height()? Also beim window resize wird auch das paint even geworfen? Aber es gibt keinen eleganteren Weg als die Berechnungen alles selber zu machen? Wenn ich 100 Objekte darstelle muss ich 100 neue Positionen berechnen und auch die Groessen anpassen.

Danke.

Verfasst: 24. Juni 2008 17:29
von upsala
Doch du könntest QGraphicsView verwenden und den Skalierungsfaktor jedes mal neu berechnen...