Seite 1 von 1

[QWT] kleines Problem mit dem Scrollzoomer

Verfasst: 16. August 2007 18:23
von TheMetalManiac
Hallo!

Ich habe eine Frage bzgl. des Srollzoomers (im QWT Beispiel RealTime_Plot zufinden).

Ich möchte gerne die Funktion implementieren, dass man die y-Achse in einem Plot autoskalieren kann...das ist ja nicht weiter schwierig:

Code: Alles auswählen

setAutoReplot(false);
setAxisAutoScale(QwtPlot::yLeft);
replot();
setAutoReplot(true);
Was muss ich nun aber tun, damit ich dem Zoomer die neue y-Achsenskalierung beibringe? Mein Ansatz war über setZoomBase(QwtDoubleRect):

newZoomerRect ist dabei ein Pointer auf ein QwtDoubleRect- Objekt.

Code: Alles auswählen

	yMin = plot->minYValue();
	yMax = plot->maxYValue();
	if (yMin <0)
	{
		yMin = 0-yMin;
		height = yMax + yMin;
	}
	else
	{
		height= yMax - yMin;
	}
	newZoomerRect->setRect(0,yMin,plot->maxXValue(),height);	
	plotZoomer->setZoomBase(*(newZoomerRect));

Leider geht das anscheinend nicht...

Bestimmt geht das sehr viel einfacher, ich finde allerdings keinen gescheiten Weg...

Herzlichen Dank schon mal!!!

TheMetalManiac

Verfasst: 17. August 2007 08:39
von Uwe
setZoomBase ist schon der richtige Ansatz.

Allerdings schreibst Du nicht was nicht funktioniert bzw. benutzt Du in Deiner Berechnung maxX(Y)Values, die falsch sein könnten.

Eventuell ist es am Einfachsten einfach setZoomBase ohne Parameter ( nach dem replot!) aufzurufen. Damit wird der zoomer mit der aktuell dargestellten Skalierung initialisiert. Allerdings veränderst Du aber auch die Werte der X-Achse.

HTH,
Uwe

Genau das ist das Problem ;)

Verfasst: 18. August 2007 11:39
von TheMetalManiac
Danke mal wieder für die schnelle Antwort!!!

Leider ist genau das das eigentliche Problem ( das sich die Werte der X.Achse dann ebenfalls verändern). Ich möchte ja eigentlich "nur" die y-Skalierung im Zoomer ändern. Mit setZoomBase() wird ja ein neues Recheck initialisiert.
Das ist jetzt noch der letzte Feinschliff in meinem Plot. :)
Leider fällt mir nichts weiter ein, wie ich den Y-Bereich ändern könnte, außer dem oben beschriebenen Code, der allerdings auch keinen Erfolg gebracht hat.

Vielleicht hast du ja noch eine Idee?

Herzlichen Dank schon mal,

TheMetalManiac