Pregunta

Estoy tratando de determinar cuándo la ventana principal de mi solicitud ha sido movido. La ventana principal es un QMainWindow estándar y hemos instalado un EventFilter en el QApplication para buscar moveEvents para el QMainWindow, pero ninguno de ellos está siendo activado. Por una variedad de razones, la subclasificación de la QMainWindow no es realmente una opción.

Cualquier pensamientos sobre este, además de iniciar un tto QTimer comprobar constantemente la posición, en gran medida sería apreciada.

¿Fue útil?

Solución

Creo que es mejor instalar el filtro de eventos en la ventana de nivel superior, en lugar de la aplicación. Sin embargo, si todavía no lo consigue QMoveEvents y que está trabajando en Windows, es probable que pueda invalidar winEventFilter() y esperar a que WM_MOVE. Una funcionalidad similar puede estar disponible en Linux y Mac.

Por lo general no recomiendo para romper la independencia de la plataforma, pero a veces puede que tenga sentido.

Otros consejos

La subclasificación es realmente la mejor solución: - /

En la clase que implementa las ventanas de nivel superior que acaba de sobrecargar esta función:

virtual void moveEvent ( QMoveEvent * event )

A partir de la documentación:

  

Este controlador de eventos puede ser   reimplantado en una subclase para recibir   los acontecimientos se mueven de widgets que se transmiten en   el parámetro de evento. Cuando el widget   recibe este evento, que ya se encuentra   la nueva posición.

     

La posición de edad es accesible a través   QMoveEvent :: antiguaposición ().

Esto debería permitir a detectar si su ventana principal se ha movido. ¿Por qué no se puede subclase? ¿Está utilizando una instancia de QMainWindow directamente? El caso de uso habitual es una subclase de todos modos.

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