有没有办法确定是否已移动顶级Qt窗口?

时间:2009-05-29 16:55:13

标签: c++ qt window-management

我正在尝试确定何时移动了我的应用程序的主窗口。主窗口是标准的QMainWindow,我们在QApplication上安装了一个eventFilter来查找QMainWindow的moveEvents,但没有触发任何一个。由于各种原因,继承QMainWindow并不是一个真正的选择。

对此有任何想法,除了启动QTimer以不断检查位置外,我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

我想最好在顶级窗口而不是应用程序中安装事件过滤器。但是,如果您仍未获得QMoveEvent并且您正在使用Windows,则可能会覆盖winEventFilter()并等待WM_MOVE。类似的功能可能适用于Linux和Mac。

我通常不建议打破平台独立性,但有时它可能有意义。

答案 1 :(得分:1)

子类化确实是最好的解决方案: - /

在实现顶级窗口的类中,您只需重载此函数:

virtual void moveEvent ( QMoveEvent * event )

来自文档:

  

此事件处理程序可以   在子类中重新实现以接收   小部件移动传入的事件   事件参数。当小部件   收到这个事件,它已经在   新职位。

     

旧位置可通过   QMoveEvent :: oldPos()。

这应该允许您检测主窗口是否已移动。 为什么不能进行子类化?您是否直接使用QMainWindow的实例?通常的用例是将其子类化。