Wie zoomt man ein QGraphicView mit Einschränkungen?

Alles rund um die Programmierung mit Qt
Antworten
taraquedo
Beiträge: 36
Registriert: 1. März 2007 13:07

Wie zoomt man ein QGraphicView mit Einschränkungen?

Beitrag von taraquedo »

Hallo!

Also ich habe bereits herausgefunden, dass ich mit

Code: Alles auswählen

	QTransform trans;
	gv->setTransform(trans.scale(10, 10));
den Inhalt meines QGraphicView um Faktor 10 vergrößert darstellen kann. Jedoch habe ich einige Objekte (z.B. Spielfiguren wie auf einem Brett eines Gesellschaftspiels), die nicht vergrößert werden sollen.

Wie kann ich das am besten lösen? In jedes Objekt die Inverse der Transformationsmatrix abzulegen kann ja nicht die Lösung sein.

Grüße!
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Re: Wie zoomt man ein QGraphicView mit Einschränkungen?

Beitrag von neuschi »

taraquedo hat geschrieben:Hallo!
Jedoch habe ich einige Objekte (z.B. Spielfiguren wie auf einem Brett eines Gesellschaftspiels), die nicht vergrößert werden sollen.

Code: Alles auswählen

item->setFlag(QGraphicsItem::ItemIgnoresTransformations);
\Ralf
taraquedo
Beiträge: 36
Registriert: 1. März 2007 13:07

Beitrag von taraquedo »

Hi!

Danke, das klappt super. Hatte ich nicht gesehen, dass es dieses Flag gibt. Aber wie kann ich nun die Position wieder korrekt beherrschen? Denn das Zoomen verändert ja alle Koordinaten gummiband-artig. Setze ich das Flag, dann wird mein Objekt zwar nicht vergrößert (gut), aber leider auch nicht umpositioniert (schlecht)...

Grüße!
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

So hab ichs bei meinem Ballistik-Programm gelöst:

Code: Alles auswählen

gv.resetTransform(); //falls du dynamisch Scalen willst
gv.scale(hZoomFactor,vZoomFactor);
item.resetTransform();
item.scale(1/hZoomFactor,1/vZoomFactor);
taraquedo
Beiträge: 36
Registriert: 1. März 2007 13:07

Beitrag von taraquedo »

Hallo und danke!

Der Teil klappt jetzt sehr gut. Aus irgendeinem Grund ist das Flag IgnoreTransformations noch ein wenig verbugt. Er scheint immer noch mit den Größen der Objekte zu rechnen, als ob diese transformiert wären. Das merkt man bei einer leeren Szene: Er verschiebt die Ansicht mittig (lt. Alignment) auf das neue Objekt. Wenn dieses aber nicht transformiert wird, dann schiebt er die Ansicht genau an die gleiche Stelle - die ja jetzt u.U. nicht mehr der Mittelpunkt der Szene ist.

Was meint ihr - ist es rechenaufwändiger, wenn man die Szene transformiert und einzelne Objekte mit der Inversen transformiert statt das Flag zu setzen? Wird hier wirklich zweimal transformiert?

Grüße!
Antworten