2012-02-13 136 views
1

我有一个应用程序,在其上显示配置面板(QFrame)来设置配置。现在我想要在用户点击应用程序的其他任何地方时关闭配置面板的功能,但如果用户单击应用程序外部的任何地方,则不应关闭应用程序。QApplication :: activeWindow在Mac上始终返回'0'

目前我有以下代码在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

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

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

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

希望这对他人有帮助!