2009-05-29 35 views
1

我想确定何时我的应用程序的主窗口已被移动。主窗口是一个标准的QMainWindow,我们已经在QApplication上安装了一个eventFilter来查找QMainWindow的moveEvents,但是没有一个被触发。由于各种原因,子类化QMainWindow并不是真正的选择。有没有办法确定顶层Qt窗口是否已被移动?

对此的任何想法,除了开始QTimer tto不断检查位置,将不胜感激。

回答

1

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

我通常不建议打破平台独立性,但有时它可能是有道理的。

1

子类确实是最好的解决办法: -/

在实现你的顶层窗口的类,你只是重载这个函数:

virtual void moveEvent (QMoveEvent * event) 

从文档:

这事件处理程序可以在子类中重新实现 以接收 小部件移动事件,该事件在 中传递仪表。当小部件 收到此事件时,它已经在 的新位置。

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

这应该允许您检测您的主窗口是否已移动。 为什么你不能继承?您是否直接使用QMainWindow的实例?无论如何,通常的用例就是继承它的子类。

+0

感兴趣的主窗口类别是单独维护的一组代码的一部分,因此无法细分为解决此问题的子类别。 – 2009-05-31 05:19:58

相关问题