mehrere SVG auf einem QWidget

Alles rund um die Programmierung mit Qt
Antworten
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

mehrere SVG auf einem QWidget

Beitrag 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!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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().
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Doch du könntest QGraphicsView verwenden und den Skalierungsfaktor jedes mal neu berechnen...
Antworten