Qt QApplication::activeWindow始终返回';0';在Mac上

Qt QApplication::activeWindow始终返回';0';在Mac上,qt,Qt,我有一个应用程序,我在上面显示配置面板(QFrame)来设置配置。现在,我想实现这样的功能:如果用户单击我的应用程序上的任何其他位置,我将关闭配置面板,但如果用户单击应用程序之外的任何位置,则不应关闭应用程序 目前我有以下代码,在Win7上运行良好,但在Mac上有问题 void ConfigurationPanel::changeEvent ( QEvent * event) { if(event->type() == QEvent::ActivationChange)

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

目前我有以下代码,在Win7上运行良好,但在Mac上有问题

  void ConfigurationPanel::changeEvent ( QEvent * event) 
  {
  if(event->type() == QEvent::ActivationChange)
  {
      if(!isActiveWindow())
      {
          if(QApplication::activeWindow())
          {
              close();
          }
      }
  }
}
在windows上,如果单击应用程序上的任何位置(但在配置面板之外),则QApplication::activeWindows()返回非零值;如果单击任何其他应用程序,则返回零值,这是预期的结果。但在Mac上,无论我在哪里单击,我总是从QApplication::activeWindow()得到零值

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


谢谢,我找到了这个问题的解决办法。 这只适用于Mac,因为它在windows上运行良好

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

由于某些原因,在Mac上的changeEvent处理程序中,我们总是将“0”作为活动窗口


希望这对其他人有帮助

我找到了解决这个问题的办法。 这只适用于Mac,因为它在windows上运行良好

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

由于某些原因,在Mac上的changeEvent处理程序中,我们总是将“0”作为活动窗口

希望这对其他人有帮助