Problema para mostrar cursor cuando esta oculto

Buenas,
He intentado hacer que un cursor que esta oculto con la siguiente instrucción:
ReproVideo::setCursor(Qt::BlankCursor);
Que con el simple hecho de que se mueva el ratón, que vuelva a aparecer con la siguientes instrucción que funciona pero si es presionado algún botón del mouse:
ReproVideo::setCursor(Qt::ArrowCursor);

El evento que he hecho es es siguiente:

bool ReproVideo::event( QEvent* event )
{
    switch( event->type() )
    {
    case QEvent::MouseButtonPress:
            this->mouse();
            break;
    case QEvent::KeyPress:
            this->mouse();
            break;
    case QEvent::MouseMove:
            this->mouse();
            break;
    case QEvent::Leave:
    case QEvent::Enter:
    case QEvent::FocusOut:
    case QEvent::CursorChange:
    default:
            return QDialog::event( event );
            break;
    }
    return false;
}

Pero no se como hacer que cuando se mueva el ratón aparezca de nuevo el cursor, aunque pensaba que era con MouseMove, pero no hace nada.

Como información, la función mouse hace lo siguiente...

void ReproVideo::mouse()
{
    if (ReproVideo::isFullScreen() == true)
    {
        if (ui->widget->isHidden() == true)
        {
            ui->widget->show();
            ReproVideo::setCursor(Qt::ArrowCursor);
        }
        else
        {
            ui->widget->hide();
            ReproVideo::setCursor(Qt::BlankCursor);
        }
    }
}

Gracias por las respuestas.
Saludos!!!

Hola kapyderi,Existe un

Hola kapyderi,

Existe una propiedad de los widgets que te ha de ser muy útil. MouseTracking, esta propiedad por defecto es false, y se refiere al seguimiento del cursor mientras se encuentra sobre un widget determinado.

Te comento que el evento Mouse Move Event, solo se dispara si el cursor se mueve mientras está presionada alguna tecla del ratón, primero debes activar el seguimiento del mouse:

void MyWidget::configure() {
// ...
setMouseTracking(true); // o simplemente en el constructor del widget
// ...
}

Luego puedes reimplementar la función mouseMoveEvent() (en tu widget).

Intenta con esta información y nos comentas.

Saludos,

Pd: Documentación
Por otro lado te recomiendo uses < qt > antes y < /qt > despues de del código que uses para que nos facilites la lectura del mismo ;)

Solucionado de esta manera...

Ante todo gracias por tu colaboración Thanatos.

Efectivamente como decias no se puede hacer sino es presionada una tecla del ratón a la hora de arrastrar, ya que de otra manera no se activa.

La solución pasa por pasar un filterEvent de la siguiente manera...

En el constructor

qapp->installEventFilter(this);

En la función correspondiente

bool ReproVideo::eventFilter(QObject *obj, QEvent *event)
 {
     if (event->type() == QEvent::MouseMove)
     {
            QMouseEvent *MouseEvent = static_cast<QMouseEvent*>(event);
            if (ReproVideo::isFullScreen() == true)
            {
                  if (ui->widget->isHidden() == true)
                  {
                        ui->widget->show();
                        ReproVideo::setCursor(Qt::ArrowCursor);
                  }
                  else
                  {
                         ui->widget->hide();
                         ReproVideo::setCursor(Qt::BlankCursor);
                  }
            }
     }
     return true;
 }

Ahora me falta pelearme con la opción que pasado 3 segundos automaticamente se oculte la barra, pero eso ya lo haré ya que tengo que conectar un timer con la opción correspondiente y si esta visible lo oculta y si es viceversa no hace nada.

Saludos y gracias por tu idea!!!!

Gracias, lo probaré...

Las dos cosas, lo de poner el < qt > que no lo sabia para el html y lo del setMouseTrackint(true) que lo leí en el manual que habeis traducido, pero que no me quedo claro...ahora con tu explicación creo que entiendo el porque.

Ya comentaré en cuanto pueda probarlo.

Saludos y Gracias como siempre!!!!

Alguna idea...

Nada que no se como arreglar este problema.

A ver si a alguno/a se le ocurre algo para solucionar este problema que me esta comiendo la cabeza.

Gracias desde ya...

Saludos!!!

Anuncios Google