我有一个应用程序,我在其中显示配置面板(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()获得零值。
有谁能告诉我如何解决这个问题?
由于
答案 0 :(得分:1)
我找到了问题的解决方案。 这仅适用于Mac,因为在Windows上它可以正常工作。
在changeEvent()处理程序中,我发布了一个我在ConfigPanel本身处理的自定义事件。在我执行QApplication :: activeWindow()时的customEvent()处理程序中,我根据单击的应用程序获取了适当的值。
出于某种原因,在更改事件处理程序的Mac上,我们总是将'0'作为活动窗口。
希望这对其他人有帮助!