Obtenir la position du clic de souris dans un QLabel

Quel est le meilleur moyen (comme dans le plus simple) d’obtenir le pos d’un mousePressedEvent dans un QLabel? (Ou, fondamentalement, obtenez simplement l’emplacement d’un clic de souris par rapport à un widget QLabel)

MODIFIER

J’ai essayé ce que Frank a suggéré de cette façon:

 bool MainWindow::eventFilter(QObject *someOb, QEvent *ev) { if(someOb == ui->label && ev->type() == QEvent::MouseButtonPress) { QMouseEvent *me = static_cast(ev); QPoint coordinates = me->pos(); //do stuff return true; } else return false; } 

Cependant, je reçois l’erreur de compilation invalid static_cast from type 'QEvent*' to type 'const QMouseEvent*' sur la ligne où j’essaie de me déclarer. Des idées que je fais mal ici?

Vous pouvez sous-classer QLabel et réimplémenter mousePressEvent (QMouseEvent *). Ou utilisez un filtre d’événement:

 bool OneOfMyClasses::eventFilter( QObject* watched, QEvent* event ) { if ( watched != label ) return false; if ( event->type() != QEvent::MouseButtonPress ) return false; const QMouseEvent* const me = static_cast( event ); //might want to check the buttons here const QPoint p = me->pos(); //...or ->globalPos(); ... return false; } label->installEventFilter( watcher ); // watcher is the OneOfMyClasses instance supposed to do the filtering. 

L’avantage du filtrage des événements est qu’il est plus flexible et ne nécessite pas de sous-classement. Mais si vous avez quand même besoin d’un comportement personnalisé à la suite de l’événement reçu ou si vous avez déjà une sous-classe, il est plus simple de simplement réimplémenter fooEvent ().

J’ai eu le même problème

static_cast invalide …

J’ai juste oublié d’inclure l’en-tête: #include "qevent.h"

Maintenant tout fonctionne bien.