Seite 1 von 1

MouseEvent durch QGraphicsView durchlassen

Verfasst: 19. Oktober 2009 10:00
von smueller
Hallo erstmal,

ich habe ein Problem und bisher über Google- und Forensuche leider nichts gescheites finden können.

Ich habe eine Klasse MapGraphicsView, die ich von der Klasse QGraphicsView abgeleitet habe.
Diese eigene View mach ich durch Aufruf von setStyleSheet("background:transparent")
transparent, da leider die Methode setWindowOpacity bei mir keinen Effekt zeigt.
Nun habe ich hinter dieser View noch ein weiteres Widget liegen, dass auf mouseEvents reagieren soll.
Mein Problem ist, dass die MouseEvents nun nicht bis an mein 'unteres' widget durchkommen.
Dazu folgender Codeausschnitt:

Code: Alles auswählen

MapGraphicsView::MapGraphicsView(QGraphicsScene *pItemScene, QWidget *pParent) : QGraphicsView(pItemScene, pParent) {
  setGeometry( pParent->geometry() );
  setStyleSheet("background:transparent");
  setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);


  EcWidget *lEcWidget = new EcWidget( QDir(), QDir("/Maps"), pParent);
  lEcWidget->setGeometry( geometry() );
  lEcWidget->setCenterLatitude( 53.51350 );
  lEcWidget->setCenterLongitude( 8.13563 );
  lEcWidget->draw();
  lEcWidget->setVisible(true);
  lEcWidget->stackUnder(this); // bring under the view (this)
}
Vielleicht wisst ihr ja, wie ich es bewerkstelligen kann, dass meine View die MouseEvents einfach 'durchlässt'?

Vielen Dank schon mal im voraus.

Gruß, Simon

Verfasst: 19. Oktober 2009 16:34
von mathies
Hallo,

da Du das Widget unter Deinem View kennst (Memberdes Views) kannste doch das MouseEvent Deines Views einfach weiterleiten. Also die jeweilige MouseEvent Funktion des Views überschreiben und das Event an Dein lEcWidget weitergeben.

Wenn Du im View das MouseEvent trotzdem nutzen willst, dann halt einfach zusätzlich noch das der Basisklasse aufrufen z.b. für ein ReleaseEvent durch QGraphicsView::mouseReleaseEvent(e);

mathies