[gelöst]Bug in QRectF???

Alles rund um die Programmierung mit Qt
Antworten
Kay
Beiträge: 62
Registriert: 9. Dezember 2008 21:07

[gelöst]Bug in QRectF???

Beitrag 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
Zuletzt geändert von Kay am 30. Juli 2010 13:07, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Laut Doku setzt QRectF::setRect() nicht die Eckpunkte.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Kay
Beiträge: 62
Registriert: 9. Dezember 2008 21:07

Beitrag 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...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ok, verlesen.
Kann man das an einem einfachen Widget reproduzieren? So dass wir es mal teste können?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Kay
Beiträge: 62
Registriert: 9. Dezember 2008 21:07

Beitrag von Kay »

Ich werde morgen mal ein Minimalbeispiel posten. Hab den Code gerade nicht bei der Hand.
Kay
Beiträge: 62
Registriert: 9. Dezember 2008 21:07

Beitrag 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
Kay
Beiträge: 62
Registriert: 9. Dezember 2008 21:07

Beitrag 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.
Antworten