Pregunta

Estoy tratando de crear una aplicación en Qt / C ++ con Qt4.5 y quiero que las todas las ventanas activas para cambiar la opacidad en un evento mouseover ...

Como lo entiendo, no hay ningún evento mouseover explícita en Qt.

Sin embargo, llegué funcionamiento rudimentaria por reimplementar mousemoveevent de QWidget () de la clase que declara mi MainWindow. Pero mousemoveevent del MainWindow no se llama cada vez que el ratón se desplaza sobre cualquiera de los cuadros de grupo que he creado allí (understandbly desde QGroupbox tiene su propio reimplementación de mousemoveevent).

Así como obra barata alrededor, todavía estoy usando el mousemoveevent de mi MainWindow pero una consulta de la posición global del ratón y en base a la posición (x, y) de la MainWindow (obtenido a través de -> pos ()) y la tamaño de la ventana (-> tamaño -> ralto y rWidth), puedo comprobar si el ratón está dentro de los límites de la zona de la MainWindow y cambiar la opacidad así

.

Esto ha tenido un éxito muy limitado. El borde derecho funciona bien, el de la izquierda cambia la opacidad 4 píxeles temprano. La parte superior no funciona (presumiblemente debido a que el ratón pasa por la barra barra de menús y título) y el fondo cambia demasiado pronto.

pensé en crear una clase QWidget recipiente vacío y luego colocar todo el resto de allí, pero me sentí que todavía no resolvería el gran problema del widget base de no recibir la mousemoveevent si ya se ha implementado en un niño Widget.

Para sugerir una corrección / errores que he hecho en mi método o cualquiera de los métodos alternativos para lograr esto.

p.s. Dudo que esto es importante, pero estoy trabajando Qt Creator IDE, la integración no Qt en VS2008 (que es la misma clase de todos modos - compilador diferente, sin embargo, MinGW )

¿Fue útil?

Solución

La instalación de filtros de eventos para cada uno de sus widgets hijos puede hacer el truco. Esto permitirá que su ventana principal para recibir eventos infantiles como los de cajas de grupo. Puede encontrar código de ejemplo del aquí .

Otros consejos

Usted puede estar interesado en los filtros de eventos. QObject demuestra una manera de interceptar todos los eventos comprimir alrededor de su aplicación.

http://doc.trolltech.com/4.5/eventsandfilters.html # eventos-filtros

Si entiendo lo que están tratando de hacer, me reimplementar enterEvent del widget () y leaveEvent (). El ratón entrar evento activaría el fundido de entrada y la leaveEvent desencadenaría el fundido de salida.

EDIT: Después de volver a leer varias veces, todavía no estoy seguro de lo que está tratando de lograr. Lo siento si mi sugerencia no ayuda. : -)

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