1

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

除了启动 QTimer 来不断检查位置之外,对此的任何想法都将不胜感激。

4

2 回答 2

2

我想最好将事件过滤器安装在顶级窗口,而不是应用程序。但是,如果您仍然没有得到QMoveEvents 并且您在 Windows 上工作,您可能可以覆盖winEventFilter()并等待WM_MOVE. 类似的功能可能适用于 Linux 和 Mac。

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

于 2009-05-29T17:09:26.197 回答
1

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

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

virtual void moveEvent ( QMoveEvent * event )

从文档中:

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

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

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

于 2009-05-29T18:16:03.087 回答