Seite 1 von 1

seltsames Verhalten beim verschieben von Linien

Verfasst: 28. Januar 2012 00:42
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?

Re: seltsames Verhalten beim verschieben von Linien

Verfasst: 28. Januar 2012 08:37
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.

Re: seltsames Verhalten beim verschieben von Linien

Verfasst: 28. Januar 2012 08:45
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.

Re: seltsames Verhalten beim verschieben von Linien

Verfasst: 28. Januar 2012 11:17
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< ?

Re: seltsames Verhalten beim verschieben von Linien

Verfasst: 28. Januar 2012 11:59
von upsala
Schau dir doch mal in der Doku den Abschnitt 'The Graphics View Coordinate System' an.

Re: seltsames Verhalten beim verschieben von Linien

Verfasst: 28. Januar 2012 12:00
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.

Re: seltsames Verhalten beim verschieben von Linien

Verfasst: 28. Januar 2012 12:19
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?)

Re: seltsames Verhalten beim verschieben von Linien

Verfasst: 28. Januar 2012 12:56
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);

Re: seltsames Verhalten beim verschieben von Linien

Verfasst: 28. Januar 2012 13:35
von Artemus
ach das, ja das ist natürlich quatsch und schon wieder raus :)