Conseguir posición del clic del ratón en un QLabel
-
08-10-2019 - |
Pregunta
¿Cuál es la mejor (como en la más simple) para obtener el pos
de un mousePressedEvent
en un QLabel? (O, básicamente, sólo obtener la ubicación de un clic del ratón con relación a un widget de QLabel)
Editar
He intentado lo que Frank sugirió de esta manera:
bool MainWindow::eventFilter(QObject *someOb, QEvent *ev)
{
if(someOb == ui->label && ev->type() == QEvent::MouseButtonPress)
{
QMouseEvent *me = static_cast<QMouseEvent *>(ev);
QPoint coordinates = me->pos();
//do stuff
return true;
}
else return false;
}
Sin embargo, recibo el invalid static_cast from type 'QEvent*' to type 'const QMouseEvent*'
error de compilación en la línea donde intento de declarar me
. Alguna idea de lo que estoy haciendo mal aquí?
Solución
Se podría subclase QLabel y reimplementar mousePressEvent (QMouseEvent *). O utilizar un filtro de sucesos:
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<const QMouseEvent*>( 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.
La ventaja de filtrado de evento es que es más flexible y no requiere subclases. Pero si usted necesita un comportamiento personalizado como resultado del evento recibido de todos modos o ya tiene una subclase, es más sencillo simplemente fooEvent reimplementar ().
Otros consejos
Yo tenía el mismo problema
inválida static_cast ...
Yo sólo olvidó incluir el encabezado: #include "qevent.h"
Ahora todo está funcionando bien.