Seite 1 von 1

[gelöst]Bug in QRectF???

Verfasst: 29. Juli 2010 16:27
von Kay
Hallo Leute,

Ich habe folgendes vor: In meinem QwtPlot-Objekt brauche ich ein Hintergrundbild, um die Plotpositionen optisch leicht zuordnen zu können. Dafür hab ich also ein PlotSVGItem erstellt und dem Plot zugewiesen. Weiterhin existiert ein QRectF-Objekt, das die Darstellungsgröße speichert.

Nun möchte ich je nach Benutzerwahl das Hintergrundbild ändern können. Dies funktioniert in zwei Fällen optimal und im dritten nicht.
Der einzige Unterschied (neben dem eigentlichen Bild, was aber ausgetauscht werden kann, ohne dass sich das Verhalten ändert) sind die Koordinaten des QRectF-Objekts.

Folgendes funktioniert: Rect.setCoords(0.0, 0.0, 0.8, 0.9);

Das funktioniert aber nicht: Rect.setCoords(-150.0, -150.0, 150.0, 150.0);
In diesem Fall skaliert er das Hintergrundbild irgendwie falsch. Jedenfalls sind die Rechteckkoordinaten richtig gesetzt, aber im Plot ist der Hintergrund voll schwarz, obwohl nur die Ecken des SVGs schwarz sein dürften.
Mit etwas Herumprobieren habe ich heraus gefunden, dass es nur zu diesem Fehlverhalten kommt, wenn beide Eckkoordinaten das Vorzeichen wechseln. Also bspw. (-150, 0, 150, 150) würde richtig skalieren oder (0, -150, 150 , 150) ebenso. Nur liegt dann das Hintergrundbild eben an der falschen Stelle.

Hat jemand eine Erklärung für dieses seltsame Verhalten oder eine Idee für ein Workaround (das Bild zeichnen und dann verschieben habe ich auch probiert, sobald beide Achsen das Vorzeichen wechseln wird falsch skaliert)?

Danke,
Kay

Verfasst: 29. Juli 2010 18:26
von Christian81
Laut Doku setzt QRectF::setRect() nicht die Eckpunkte.

Verfasst: 29. Juli 2010 18:41
von Kay
Das versteh ich jetzt nicht. Ich hab doch QRectF::SetCoord() benutzt. Laut Doku setzt man damit die linke obere Ecke und die rechte untere. Wobei in ich in dem funktionierenden Code-Teil die linke untere und die rechte, obere Ecke angebe...

Verfasst: 29. Juli 2010 18:43
von Christian81
Ok, verlesen.
Kann man das an einem einfachen Widget reproduzieren? So dass wir es mal teste können?

Verfasst: 29. Juli 2010 18:53
von Kay
Ich werde morgen mal ein Minimalbeispiel posten. Hab den Code gerade nicht bei der Hand.

Verfasst: 30. Juli 2010 12:39
von Kay
Also in meinem Minimalbeispiel kann ich das Problem nicht reproduzieren. Ich gehel also erstmal auf Fehlersuche.

Was mir aber aufgefallen ist, ist dass QRectF::setCoords() laut Hilfe die Koordinaten von der linken, oberen Ecke und der rechten, unteren Ecke übergeben haben möchte.
Bei mir funktioniert das aber nur, wenn ich die linke, UNTERE Ecke und die rechte, OBERE Ecke angebe. Entweder ist die Zählweise in y-Richtung bei Qt anders (was aber den Bildern in der Hilfe nach nicht so zu sein scheint) oder da haut wirklich was nicht hin (vielleicht bin ich auch nur zu dusselig zum Lesen...)

Grüße,
Hardy

Verfasst: 30. Juli 2010 13:07
von Kay
Also ich hab jetzt rausgefunden, dass es nicht am QRectF (allein) liegt, sondern am QwtPlotSvgItem. Wenn ich beide dynamisch allokiere immer wenn ich das Hintergrundbild wechsel, dann funktionierts.