Seite 1 von 1

[Gelöst] "Enter" abwarten in QGraphicsScene

Verfasst: 3. August 2010 15:32
von abcmann74
Hi

Ich habe folgendes Problem.

Ich will gerne eine Funktion in meiner Hauptklasse MainWindow.h (abegeleitet von QMainWindow) starten. Am Anfang der Funktion will ich, dass man Punkte in meinem QGraphicsView / QGraphicsScene solange klicken kann bis man Enter drückt. Für meine QGraphicsView / QGraphicsScene habe ich eine weitere Klasse (ImageWindow.h) implementiert. Dort greife ich mit QGraphicSceneEvents auf die Mauspositionen usw. zu.
Kurz gesagt: Meine Funktion in MainWindow.h soll solange warten, bis ich in meinem QGraphicsView / QGraphicsScene die Punkte ausgewählt und "Enter" gedrückt habe. Dann erst hole ich mir die Punkte aus der ImageWindow.h Klasse und arbeite damit in meiner Hauptklasse MainWindow.h weiter.

Ich habe bereits versucht mit dem QTimer zu abreiten, aber bin damit auch nicht wirklich vorran gekommen.

Vllt. kann mir hier jemand weiterhelfen?

Grüße

Verfasst: 3. August 2010 17:45
von upsala
Hmm, schon mal mit einem keyPressEvent versucht?

Verfasst: 4. August 2010 09:36
von abcmann74
hi upsala danke für deine Antwort.

Mit dem keyPressEvent() habe ich es schon versucht. Sobald ich Enter drücke, setze ich eine globale Variable "EnterPressed_" auf true. Klar könnte ich sagen, sobald "EnterPressed_==true" sind keine Klicks mehr erlaubt.
Das Problem ist dann aber weiterhin, dass meine andere Funktion in MainWindow.h nicht auf das klicken wartet. Sie läuft einfach durch und ich habe gar keine Zeit die Punkte zu klicken. Erst nach dem Enter event in meiner ImageWindow.h soll es in der Funktion in Mainwindow.h weitergehen.

Verfasst: 4. August 2010 10:13
von padreigh
Bau nen Knopf, schreib Punkte übertragen drauf, kleb den neben das Grafiks view (oder in die Hauptklasse). Progge nen Slot der alle Punkte aus dem Grafiksview holt und als QList<QPoint> an die main gui weitergibt ?

Warum Enter?


Wenn du den User gängeln willst schau dir QWizard an ...

Verfasst: 4. August 2010 10:25
von franzf
Kurz gesagt: Meine Funktion in MainWindow.h soll solange warten, bis ich in meinem QGraphicsView / QGraphicsScene die Punkte ausgewählt und "Enter" gedrückt habe. Dann erst hole ich mir die Punkte aus der ImageWindow.h Klasse und arbeite damit in meiner Hauptklasse MainWindow.h weiter.
Das Problem ist dann aber weiterhin, dass meine andere Funktion in MainWindow.h nicht auf das klicken wartet. Sie läuft einfach durch und ich habe gar keine Zeit die Punkte zu klicken. Erst nach dem Enter event in meiner ImageWindow.h soll es in der Funktion in Mainwindow.h weitergehen.
Die beiden Aussagen + Titel machen mir Angst...
Gehst du irgendwie von einer nicht blockierenden Funktion aus, die abgearbeitet wird, und rigendwo stehen bleiben soll, bis enter gedrückt wurde? Das geht nämlich nicht!
Und globale Variablen sind sowieso böse. In deinem Fall sogar unsinnig, da du keinen "Listener" hast, der den Status der Variablen überwacht (sowas gibts in C++ nicht).

Das einzige was du machen musst: korrekt ein keyPressEvent implementieren! Mach es in der scene, im Event frägst du nach Enter, falls das eintritt entfernst du bei allen Items das ItemIsSelectable-Flag. Fertig.

Verfasst: 2. September 2010 09:46
von abcmann74
danke franzf. sry für die sehr späte rückmeldung. habe es mit einem KeyPressEvent hinbekommen.