QApplication :: activeWindow在Mac上始终返回“0”

时间:2012-02-13 09:54:32

标签: qt

我有一个应用程序,我在其中显示配置面板(QFrame)来设置配置。现在,我希望实现功能,如果用户点击我的应用程序上的任何其他位置,我将关闭配置面板,但如果用户单击应用程序外的任何位置,则不应关闭该应用程序。

目前我有以下代码在Win 7上运行正常,但在Mac上有问题。

  void ConfigurationPanel::changeEvent ( QEvent * event) 
  {
  if(event->type() == QEvent::ActivationChange)
  {
      if(!isActiveWindow())
      {
          if(QApplication::activeWindow())
          {
              close();
          }
      }
  }
}

在Windows上如果我们单击应用程序上的任何位置(但在配置面板外),QApplication :: activeWindows()将返回非零值,如果我单击任何其他预期的应用程序,则返回零值。但是在Mac上,无论我在哪里点击,我总是从QApplication :: activeWindow()获得零值。

有谁能告诉我如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:1)

我找到了问题的解决方案。 这仅适用于Mac,因为在Windows上它可以正常工作。

在changeEvent()处理程序中,我发布了一个我在ConfigPanel本身处理的自定义事件。在我执行QApplication :: activeWindow()时的customEvent()处理程序中,我根据单击的应用程序获取了适当的值。

出于某种原因,在更改事件处理程序的Mac上,我们总是将'0'作为活动窗口。

希望这对其他人有帮助!