[QWT] Zoomen...modifiziertes Rechteck auf Stack?

Alles rund um die Programmierung mit Qt
Antworten
TheMetalManiac
Beiträge: 19
Registriert: 21. Juni 2007 15:46

[QWT] Zoomen...modifiziertes Rechteck auf Stack?

Beitrag von TheMetalManiac »

Hallo.

Wenn man mit dem Zoomer aus dem PlotZoomer Beispielen von QWT arbeitet, wie kann man dann ein bestehendes Rechteck des ZoomStacks modifizieren (in meinem Fall möchte ich die Y- Achse autoskalieren lassen)?
Das aktuelle Rechteck vom Stack holen, autoskalieren und replot:

Code: Alles auswählen

    plotZoomer->zoom(-1);
    setAxisAutoScale(yLeft);
    replot();
und dann?

Wie kann ich dann ein modifiziertes Rechteck zurück auf den Stack packen? Also OHNE die vorhandenen Rechtecke zu überschreiben (setZoomBase würde ja nur ein neuen Stack aufbauen).

Danke schon mal für die Hilfe,

Gruß,

TheMetalManiac
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Beitrag von Uwe »

Die y Achse nach jedem Zoomen "autozuskalieren" ist doch eigentlich dasselbe wie die Achsen vorab einmal zu skalieren und dann nur die x-Achse zu zoomen.

Wenn Du nur eine y-Achse benötigst, kannst Du das ganz einfach erreichen, indem Du dem Zoomer die andere y Achse gibst ( z.B. zoomer->setAxis(QwtPlot::xBottom, QwtPlot::yRight).
Falls Du beide Achsen benötigst würde ich QwtPlotZoomer::rescale oder QwtPlotZoomer::zoom überladen. Vermutlich genügt es schon in zoom die y-Koordinaten des Rechtecks auf die aktuellen Achsenwerte zu setzen und dann die Basisklasse zu rufen.

Uwe
TheMetalManiac
Beiträge: 19
Registriert: 21. Juni 2007 15:46

Beitrag von TheMetalManiac »

Danke mal wieder für die gewohnt schnelle Antwort :).

Also, ich möchte es dem Benutzer ermöglichen in einen Abschnitt weit reinzuzoomen (also ohne die Autoskalierungsfunktion zu arbeiten) und dann per Buttonklick eine Autoskalierung durchzuführen, wobei dann eben das alte Rechteck vom Stack gepoppt werden soll und das modifizierte Rechteck auf den Stack gepackt wird. Derzeit springt - beim scrollen mit der Scrollbar zum Beispiel - der Plot wieder auf das "alte" Rechteck zurück.

Also die eigentliche Frage ist: Wie bekomme ich das "neue" Rechteck auf den Stack. (Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht?).

Versuche mal weiter, wenn du noch ein Tipp hast, wäre ich natürlich sehr glücklich =).

Nochmals herzlichen Dank für deine Hilfe,

TheMetalManiac
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Beitrag von Uwe »

Solange Du die Rechtecke auf dem Zoomstack nur verändern willst ( also keine hinzufügen oder wegnehmen ) geht das ganz einfach:

Code: Alles auswählen

QStack<QwtDoubleRect> &stack = const_cast<QStack<QwtDoubleRect> &> zoomer->zoomStack();
stack.last() = ...;
Uwe
Antworten