[Gelöst] QGraphicsEllipseItem Skalierung anpassen

Alles rund um die Programmierung mit Qt
Antworten
abcmann74
Beiträge: 31
Registriert: 3. Mai 2010 11:03

[Gelöst] QGraphicsEllipseItem Skalierung anpassen

Beitrag von abcmann74 »

Hi

Ich habe folgendes Problem:

In meine QGraphicsScene zeichne ich QGraphicsEllipseItem's als Punkte ein:

Code: Alles auswählen

QGraphicsEllipseItem *point = addEllipse(x-3,y-3,6,6,Qt::SolidLine,Qt::SolidPattern);
Diese QGraphicsScene zeige ich dann über ein QGraphicsView an. Was ich erreichen will ist, dass die "Punkte" mitskaliert werden. Sie sollen sich der aktuellen Zoomstufe anpassen. Das heißt wenn ich in meinen QGraphicsView so weit skaliert habe, dass ich die einzelnen Pixel der QGraphicsScene sehen kann, sollen die Punkte auch nur noch ein Pixel groß sein. Wenn ich hingegen die ganze GraphicScene sehe, sollen die Punkte wieder größer werden, damit ich sie auch sehen kann.
Ich habe es schon mit den horizontalen und vertikalen Skalierungsfaktoren (m11 und m22) aus der Transformationsmatrix probiert. Leider ohne Erfolg.
setFlags(QGraphicsItem::ItemIgnoresTransformations) hat mir auch nicht weiter geholfen.

Für jede Hilfe wäre ich sehr dankbar.
Zuletzt geändert von abcmann74 am 19. Juli 2010 09:05, insgesamt 1-mal geändert.
abcmann74
Beiträge: 31
Registriert: 3. Mai 2010 11:03

Beitrag von abcmann74 »

kann mir keiner weiterhelfen?
grüße
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

QGraphicsView macht eigentlich per Default GENAU DAS was du willst, drum versteht wohl hier niemand dein Problem...
view.scale(2,2) z.B. vergrößerst die Ansicht um Faktor 2, alle Items (dazu zählen auch EllipseItems) werden doppelt so groß gezeichnet.
QGraphicsItem::ItemIgnoresTransformations hingegen VERHINDERT, dass das Item die Transormation annimmt. Bei obigem Zoom wird das Item nicht um Faktor 2 vergößert, sondern bleibt immer gleich groß (in sichtbaren "Monitorpixeln" gemessen).

Wenn das immer noch nicht hilft, solltest du ein minimales, kompilierbares Beispiel posten, welches dein Problem deutlich macht.
abcmann74
Beiträge: 31
Registriert: 3. Mai 2010 11:03

Beitrag von abcmann74 »

danke für deine antwort franzf. ich glaube ich habe das problem nicht richtig erklärt.

Was ich schon mache:
Ich füge QGraphicsEllipseItem's einer QGraphicsScene hinzu. Ich skaliere den QGraphicsView um eine Zoomfunktion zu realisieren.

Was ich will:
Beim rein zoomen sollen die QGraphicsEllipseItem's auch kleiner werden (und nicht größer - wie bei der default einstellung). Beim raus zoomen sollen die Punkte wieder größer werden.

Lösung (bin ich eben selber drauf gekommen):
Bei jedem skalieren des QGraphicsView, suche ich mir alle QGraphicsEllipseItems (alle mit dem Z-Wert 1) und skaliere diese auf den Skalierungskaftor m11 aus der Transormationsmatrix. Das sieht dann ungefähr so aus:

Code: Alles auswählen


void ImageWindow::ScaleImage(double factor, QPointF P)
{
	QTransform matrix = View_->transform();
	ScaleFactor_ = matrix.m11();

	View_->centerOn(P);
	View_->scale(factor,factor);
	View_->centerOn(P);
	
	QList<QGraphicsItem *> list = this->items();

	for (int i = 0; i < list.size(); i++)
	{
		if(list[i]->zValue()==1)
		{
			list[i]->setScale(1/ScaleFactor_); 
		} 
	}
}

Das funktioniert recht gut.
grüße
Antworten