seltsames Verhalten beim verschieben von Linien

Alles rund um die Programmierung mit Qt
Antworten
Artemus
Beiträge: 15
Registriert: 14. Januar 2012 16:50

seltsames Verhalten beim verschieben von Linien

Beitrag von Artemus »

Hallo,

ich habe in einer QGraphicsScene 4 Linien erstellt die ein Viereck bilden. Mit einem Button ändere ich dann die Koordinaten der einzelnen Anfangs- und Endpunkte der Linien.
Die Koordinaten der Punkte werden mit

Code: Alles auswählen

void QGraphicsLineItem::setLine ( qreal x1, qreal y1, qreal x2, qreal y2 )
gesetzt.
Ich habe das Flag gesetzt das die Linien vom Benutzer verschiebbar sind, was auch funktioniert.

Das Problem ist das beim setzen neuer Koordinaten (ausgelöst durch einen Button) die Linien immernoch um die selben relativen Strecken verschoben sind.
Ich habe mal eine Video aufgenommen, dann wird vielleicht deutlicher was ich meine:
http://vimeo.com/35773791

Ist das in Bug oder was haben die Enwickler sich dabei gedacht?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: seltsames Verhalten beim verschieben von Linien

Beitrag von upsala »

Nein, das ist Bug, es wird nämlich immer nur pos() verschoben. Wenn man die Koordinaten anders braucht, kann man ja mit den map...-Methoden umrechnen.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: seltsames Verhalten beim verschieben von Linien

Beitrag von franzf »

Was bringt ein Video, wenn man den Code dazu nicht hat? Es wäre einfacher, du würdest dein Programm in ein Zip hauen (bitte nur Sources, keine Binaries/Libraries/...), und hier über die Forenfunktion "Attachement" anhängen.
Artemus
Beiträge: 15
Registriert: 14. Januar 2012 16:50

Re: seltsames Verhalten beim verschieben von Linien

Beitrag von Artemus »

franzf hat geschrieben:Was bringt ein Video, wenn man den Code dazu nicht hat? Es wäre einfacher, du würdest dein Programm in ein Zip hauen (bitte nur Sources, keine Binaries/Libraries/...), und hier über die Forenfunktion "Attachement" anhängen.
Es steht doch alles relevante im Text: verschiebbares QGraphicsLineItem welches über setLine() eine Position zugewiesen bekommt. nagut wenn du unbedingt den ganzen code haben willst, ist im Anhang.
upsala hat geschrieben:Nein, das ist Bug, es wird nämlich immer nur pos() verschoben. Wenn man die Koordinaten anders braucht, kann man ja mit den map...-Methoden umrechnen.
Also wenn ich das richtig verstanden habe dann hat jede Linie ihr eigenes Koordinatensystem und beim verschieben der Linie wird nicht >die Linie in ihrem Koordinatensystem verschoben< sondern >das gesamte Koordinatensystem der Linie wird innerhalb des Koordinatensystems der Scene verschoben< ?
Dateianhänge
source.zip
(3.03 KiB) 277-mal heruntergeladen
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: seltsames Verhalten beim verschieben von Linien

Beitrag von upsala »

Schau dir doch mal in der Doku den Abschnitt 'The Graphics View Coordinate System' an.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: seltsames Verhalten beim verschieben von Linien

Beitrag von franzf »

Das kompiliert nicht.
* datatypes.h fehlt
* addLine übergibst du ein CL_STATE, anstatt ein QLie-Objekt.

Ansonsten hatte ich vorher den Post von Solarix nicht ganz verstanden, weil da ein "kein" vor dem "Bug" fehlt.
Und ja - jedes Item hat sein eigenes Koordinatensystem (steht so auch in der Doku). Sonst müsste man selber in paint(), boundingRect(), usw. erstmal umrechnen in parent/scene/... Koordinaten, was nicht gerade benutzerfreundlich wäre. Um weiterhin mit setLine() arbeiten zu können, solltest du also vorher brav item->setPos(0,0) machen, dann gibt auch setLine() wieder die Position an, die du willst.
Artemus
Beiträge: 15
Registriert: 14. Januar 2012 16:50

Re: seltsames Verhalten beim verschieben von Linien

Beitrag von Artemus »

franzf hat geschrieben:Das kompiliert nicht.
Ja, habe ich auch gerade gemerkt da ich versuche die Bewegung beim verschieben auf eine Achse einzuschränken und die Objekte in einen Grid einrasten zu lassen. dazu muss ich einige Methoden von QGraphicsLineItem verändern. (Linie 3 und 4 wieder als QGraphicsLineItem deklarieren, dann müsste es gehen)
franzf hat geschrieben:* addLine übergibst du ein CL_STATE, anstatt ein QLie-Objekt.
Das verstehe ich nicht.? (ich übergebe addLine doch Koordinaten und ein QPen?)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: seltsames Verhalten beim verschieben von Linien

Beitrag von franzf »

Artemus hat geschrieben:
franzf hat geschrieben:* addLine übergibst du ein CL_STATE, anstatt ein QLie-Objekt.
Das verstehe ich nicht.? (ich übergebe addLine doch Koordinaten und ein QPen?)
pr_state, Zeile 16:

Code: Alles auswählen

pq_line3 = pq_scn->addLine(this);
Artemus
Beiträge: 15
Registriert: 14. Januar 2012 16:50

Re: seltsames Verhalten beim verschieben von Linien

Beitrag von Artemus »

ach das, ja das ist natürlich quatsch und schon wieder raus :)
Antworten