Seite 1 von 1

Rechteck ziehen

Verfasst: 24. Mai 2007 23:05
von Robzon
Hallöle,

ich würde gern ein Rechteck in einer QGraphicsScene ziehen (ähnlich einer Markierung) um dann anhand der Grenzen (bzw. Eckpunkte) eine Zeichnung in diesem Bereich zu machen. Gibt es für das Rechteck ein schöne Lösung, so dass ich das Rechteck auch schon während des Zeichnens sehen kann?

Das Rechteck soll wie gesagt so wie bei einer Markierung im WindowsExplorer erstellt werden: Linksklick -> ziehen -> loslassen

danke schonmal
Robert

Verfasst: 25. Mai 2007 09:04
von upsala
mousePressEvent: rechteck erzeugen
mouseMoveEvent: rechte untere Ecke neue Koordinate setzen
mouseReleaseEvent: Rechteckdaten auswerten

Verfasst: 25. Mai 2007 11:51
von Robzon
gibts evtl. noch was eleganteres? Ansonsten werd ichs mal damit probieren!

Danke :)

Verfasst: 25. Mai 2007 12:13
von upsala
Definiere 'Eleganter'...

Verfasst: 25. Mai 2007 12:27
von macman
fertigen Code :-)

Verfasst: 28. Mai 2007 12:47
von Robzon
nein... fertigen code mein ich nicht... ich hatte mehr an einen Befehl gedacht, der alle drei in sich zusammenfasst... vllt. "drawRectangle" oder so ähnlich :)

ansonsten leuchtet mir die Lösung aber auch ein!

Verfasst: 30. Mai 2007 23:19
von Robzon
hab jetzt mal ein wenig gebastelt, stehe aber momentan vor folgendem Problem: beim MouseMoveEvent will ich kontinuierlich die aktuelle Mausposition ausgeben lassen. Dafür existiert bereits eine Funktion, allerdings kommt im Moment nur die Ausgabe von (0, 0):

Code: Alles auswählen

void MapScene::mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent)
{
	SecondRectPoint = mouseEvent->pos(); // aktuellen zweiten Rechteckpunkt definieren 
	mGuiTMPOptions->displayCursorPosition(SecondRectPoint.x() , SecondRectPoint.y()); //zweiten Punkt anzeigen (müsste stets aktuell sein)
}
über das Release Event würde ich im Prinzip dann nur nochmal diesen Ablauf wiederholen und den letzten Punkt auf den QPointF SecondRectPoint schreiben. Als nächstes müsste noch während des MouseMoveEvents kontinuierlich ein Rechteck gezeichnet und aktualisiert werden - aber damit hab ich mich noch nicht weiter befasst.

Hoffentlich könnt ihr mir mit dem Code-Schnipsel weiterhelfen :shock:

Verfasst: 31. Mai 2007 09:08
von upsala
Probiers mal mit scenePos() statt pos() und lies dir Doku dazu mal durch...

Verfasst: 31. Mai 2007 14:21
von mathies
Hi,

Du mußt den Standardkonstruktor noch aufrufen. Den Fehler hallte ich letztens auch drin.

Code: Alles auswählen

void MapScene::mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent) 
{ 
    QGraphicsScene::mouseMoveEvent(mouseEvent);
    SecondRectPoint = mouseEvent->pos();
    mGuiTMPOptions->displayCursorPosition(SecondRectPoint.x() , secondRectPoint.y());
}
Grüßle,
Matthias

Verfasst: 31. Mai 2007 17:46
von Robzon
sehr gut, das hat geholfen :)