¿Hay una manera de determinar si una ventana de nivel superior Qt se ha movido?
-
06-09-2019 - |
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.
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 QMoveEvent
s 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.