我正在尝试确定何时移动了我的应用程序的主窗口。主窗口是标准的QMainWindow,我们在QApplication上安装了一个eventFilter来查找QMainWindow的moveEvents,但没有触发任何一个。由于各种原因,继承QMainWindow并不是一个真正的选择。
对此有任何想法,除了启动QTimer以不断检查位置外,我们将不胜感激。
答案 0 :(得分:1)
我想最好在顶级窗口而不是应用程序中安装事件过滤器。但是,如果您仍未获得QMoveEvent
并且您正在使用Windows,则可能会覆盖winEventFilter()
并等待WM_MOVE
。类似的功能可能适用于Linux和Mac。
我通常不建议打破平台独立性,但有时它可能有意义。
答案 1 :(得分:1)
子类化确实是最好的解决方案: - /
在实现顶级窗口的类中,您只需重载此函数:
virtual void moveEvent ( QMoveEvent * event )
来自文档:
此事件处理程序可以 在子类中重新实现以接收 小部件移动传入的事件 事件参数。当小部件 收到这个事件,它已经在 新职位。
旧位置可通过 QMoveEvent :: oldPos()。
这应该允许您检测主窗口是否已移动。 为什么不能进行子类化?您是否直接使用QMainWindow
的实例?通常的用例是将其子类化。