MouseEvent-Handler des Parent-Widgets verwenden

Alles rund um die Programmierung mit Qt
Antworten
Gruwe
Beiträge: 21
Registriert: 14. April 2011 18:15

MouseEvent-Handler des Parent-Widgets verwenden

Beitrag von Gruwe »

Hallo,

ich habe folgendes Problem:

Ich habe eine QMainWindow-Widget in das ich als CentralWidget ein QGraphicsView integriert habe.
Wenn ich nun über die "Zeichenfläche" des QGraphicView die Maus bewege, möchte ich das der EventHandler
"mouseMoveEvent" vom QMainWindow aufgerufen wird und nicht nur der des QGraphicView.

Bei "mousePressEvent" funktioniert es komischerweise, also der entsprechende Event-Handler des QMainWindow wird
aufgerufen.

Kann mir jemand erklären, warum das so ist und wie ich dennoch bei einem "mouseMoveEvent" den entsprechenden Handler
des übergehordneten Widgets aufrufen kann, ohne dass ich in dem Fall hier eine eigene, abgeleitete Klasse von QGraphicsView
schreiben muss!?

MfG und Danke
Gruwe
Beiträge: 21
Registriert: 14. April 2011 18:15

Re: MouseEvent-Handler des Parent-Widgets verwenden

Beitrag von Gruwe »

Hallo,

noch eine weitere Frage, deren Beantwortung meine erste Frage eigentlich unnötig machen würde:

Kann ich einen Ereignishandler implementieren, der den Ereignishandler der Klasse, von der abgeleitet wurde, weiterhin verwendet und ich eben nur was dazumachen kann?

Beispiel in meinem vorliegenden Fall:

Wenn ich mir in mein Programm ein QGraphicsView integriere, so kann ich Items, die ich über das QGraphicsView in meine QGraphicsScene einfüge, per gedrückter Maus ja verschieben.
Wenn ich jetzt jedoch eine eigene Klasse von QGraphicsView ableite, kann ich damit ebenfalls die Items der Scene verschieben.
Gehe ich jetzt jedoch hin und implementiere den Ereignishandler "mouseMoveEvent" in meiner abgeleiteten Klasse neu, so hab ich die Funktion, dass ich das Item in der Scene mit gedrückter Maus verschieben kann, nicht mehr...ich müsste das ganze erst in dem neuen Eventhandler schreiben.

Gibt es jetzt eine Möglichkeit den Eventhandler neu zu implementieren, aber einige (bzw. alle) Funktionen der Basisklasse weiterhin zu verwenden?


MfG und Danke
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: MouseEvent-Handler des Parent-Widgets verwenden

Beitrag von brax »

Du kannst in der abgeleiteten Klasse die Methode der Superklasse aufrufen, indem Du den vollen Namen benutzt (also KlassenName::methodenName()).

Beispiel:

Code: Alles auswählen

class Foo {
public:
   virtual void dbgPrint() {
     qDebug() << "I am Foo";
  }
}

class Bar : public Foo {
public:
  virtual void dbgPrint() {
      Foo::print();
     qDebug() << "and I am Bar";
  }
}

.
.
Bar bla;
bla.print();
Der Aufruf wird nun "I am Foo and I am Bar" ausgeben (den zweiten Teil auf einer neuen Zeile, weil das qDebug() eben so macht).
Antworten