Seite 1 von 1

Maus-Aktionen abfangen

Verfasst: 14. Oktober 2007 13:42
von slackfr
Hallo,
habe folgendes Problem: Ich kann keine Maus-Aktionen abfangen dort wo ich diese möchte.

Also die ist meine Struktur:

Code: Alles auswählen

QMainWindow -> QWidget -> QGLWidget1
                                           QGLWidget2
Ich kann ohne Probleme die Mausinteraktionen mittels "mouseMoveEvent" & Co. abfangen in den Classen "QGLWidget", diese aber separat, d.h. ist die Maus über QGLWidget1 so kann ich dort die Mausinteraktionen abfangen. Bin ich mit der Maus über QGLWidget2, so dort.... Alles schön und gut.
Jedoch möchte ich meine Objekte, die in QGLWidget1/2 liegen (nach Wunsch) synchronisiert Verwalten, dazu müsste ich die Mausinteraktionen in dem QWidget davor abfangen, dies klappt bei mir aber nicht (wobei die Tastaturabfrage nur so klappt, also über den davorliegenden QWidget).

Jemand eine Idee??

Gruß,
Anton

Verfasst: 14. Oktober 2007 14:06
von Volker
Aus Deiner Beschreibung konnte ich leider nicht erkennen, was genau Du eigentlich machen willst. Aber evtl. hilft es Dir einen eventFilter auf die beiden Widgets zu machen und je nachdem welches Object dem eventFilter übergeben wird reagierst du entsprechend.
Oder Du definierst in deinen GLWidgets ein Signal das in der Deinen mouseMoveEvent Implementierungen emittiert wird.

Verfasst: 14. Oktober 2007 14:31
von slackfr
hmm...
dann versuche ichs nochmal anders zu erklären:
1) Ich habe QWidget (fenster.cpp), in welchem ich zwei QGLWidgets (gl1.cpp, gl2.cpp) verwalte.
2) Tippe ich auf die Tastatur, so kann ich diesen Befehl in fenster.cpp abfangen und dann an die einzelnen gl1.cpp und gl2.cpp weiterleiten.
3) Klicke ich auf eine Maustaste, so kann ich diesen Befehl nicht in fenster.cpp abfangen sondern nur in gl1.cpp oder gl2.cpp (abhängig davon über welchem gl-fenster sich die Maus gerade Befindet)

=> wunsch ist es aber die Mausbefhele in fenster.cpp abzufangen, dazu mache ich derzeit

Code: Alles auswählen

//[b]in fenster.cpp[/b]
void Fenster::mousePressEvent(QMouseEvent *ev) {
	qDebug("Fenster::mouse press");
}

//und in gl1.cpp bzw. gl2.cpp
void GL1::mousePressEvent(QMouseEvent *ev) {
	qDebug("GL1::mouse press");
}
starte ich das Programm und klicke auf eine Maustaste, so bekomme ich nur GL1::mouse press in der Konsole ausgegeben, nicht aber Fenster::mouse press, obwohl ich doch die gl1 und gl2 in fenster.cpp angelegt habe (und nicht umgekehrt)

Für meine Aufgabe muss ich aber in fenster.cpp die Mausabfangen können, und das kriege ich nicht hin :(

Verfasst: 14. Oktober 2007 14:35
von upsala
Volker hat dir doch schon den Tip mit dem Event-Filter gegeben...

Verfasst: 14. Oktober 2007 14:45
von slackfr
Habe diesen "eventFilter" noch nie verwendet, könnte eventuell jemand von euch dieses etwas genauer ausführen. Aus der Beschreibung auf der qt-Seite werde ich nicht ganz schlau...

P.S. und warum ist es überhaupt so, dass die Tastatur vor Anfang an "normal arbeitet" und die Mausbefehle nicht?