Rechteck ziehen

Alles rund um die Programmierung mit Qt
Antworten
Robzon
Beiträge: 9
Registriert: 6. Mai 2007 12:27
Wohnort: Thüringen
Kontaktdaten:

Rechteck ziehen

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

mousePressEvent: rechteck erzeugen
mouseMoveEvent: rechte untere Ecke neue Koordinate setzen
mouseReleaseEvent: Rechteckdaten auswerten
Robzon
Beiträge: 9
Registriert: 6. Mai 2007 12:27
Wohnort: Thüringen
Kontaktdaten:

Beitrag von Robzon »

gibts evtl. noch was eleganteres? Ansonsten werd ichs mal damit probieren!

Danke :)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Definiere 'Eleganter'...
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

fertigen Code :-)
Robzon
Beiträge: 9
Registriert: 6. Mai 2007 12:27
Wohnort: Thüringen
Kontaktdaten:

Beitrag 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!
Robzon
Beiträge: 9
Registriert: 6. Mai 2007 12:27
Wohnort: Thüringen
Kontaktdaten:

Beitrag 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:
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Probiers mal mit scenePos() statt pos() und lies dir Doku dazu mal durch...
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag 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
Robzon
Beiträge: 9
Registriert: 6. Mai 2007 12:27
Wohnort: Thüringen
Kontaktdaten:

Beitrag von Robzon »

sehr gut, das hat geholfen :)
Antworten