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í?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top