2012-04-06 9 views
5

Me gustaría crear una ventana de información semitransparente que no obstaculice las demás actividades del usuario. Cualquier clic en la ventana debería pasar como si la ventana no estuviera allí.QMainWindow que ignora los clics, los pasa a las ventanas de fondo

¿Cómo recomendarías implementar tal comportamiento? ¿Hay una manera fácil de hacerlo o tengo que seguir una solución torpe? Estoy pensando en ocultar la ventana, volver a ejecutar el clic y luego volver a hacer visible la ventana. Pero esto seguiría arruinando los gestos de arrastrar y soltar.

+0

¿Alguna vez ha logrado implementar esto? Estoy tratando de implementar lo mismo. – Kolyunya

Respuesta

6

Tome un vistazo a un valor de enumeración de Qt::WidgetAttribute: Qt::WA_TransparentForMouseEvents:

Cuando está activado, este atributo desactiva la entrega de eventos de ratón a el widget y sus hijos. Los eventos del mouse se entregan a otros widgets como si el widget y sus hijos no estuvieran presentes en la jerarquía de widgets ; los clics del mouse y otros eventos efectivamente "pasan a través de" ellos. Este atributo está deshabilitado por defecto.

+0

Me gusta [esto] (http://i.imgur.com/yGB2Q.png)? Podría estar equivocado, pero parece que no funciona para Windows. – Pieter

+0

@Pieter ¿Desea que sus clics pasen a través de su ventana de información semitransparente a otra ventana que pertenece a la misma u otra aplicación? – Bill

+0

@Pieter Lo importante aquí es que, hasta donde yo sé, tus clics en la ventana de información semitransparente que tiene el atributo Qt :: WA_TransparentForMouseEvents son recibidos por otra ventana si y solo si esa ventana pertenece a la misma aplicación Qt. Comprobé la fuente de Qt y el atributo mencionado afecta el comportamiento de 'QWidget * QApplication :: widgetAt (const QPoint & point) [static]' que se usa internamente para decidir qué ventana de la aplicación recibe el evento del mouse. – Bill

0

Hice un poco más de investigación sobre la "transparencia del evento del mouse" (no conocía la terminología exacta) y encontré this.

No creo que haya un enfoque general y fácil para su problema. Probablemente tendrás que profundizar en la API nativa. Una vez que los eventos llegan a una aplicación, no se envían a otras aplicaciones por su cuenta.

¿Qué piensan? ¿Estoy condenado a trabajar con las API nativas de cada sistema operativo?

Cuestiones relacionadas