2010-12-14 109 views
1

我正面临一个令人讨厌的设计问题。不容易给我的问题的标题。隐藏窗口,直到显示顶部窗口

我必须显示两个窗口,一个在另一个之上。第一个是可可窗口,第二个是用Qt制作的。在第二个窗口中,执行一个操作,但用户可以选择关闭此窗口。他必须回到第一个窗口。

为了显示我的第一个窗口,它实际上是一个SFAuthorizationPluginView,我做的:

[myview displayView]; 

然后,显示使用Qt的第一个窗口的顶部做出的窗口:

QWidget* w = openMyScreen(); 
NSView* v = (NSView*)w->winId(); 
[[v window] setLevel:2003]; 

该作品好吧,但是在第二个窗口显示之前有一个小的延迟。因此,我们可以在很短的时间内看到第一个窗口。

我需要第二个窗口停留在第一个窗口之上,因为用户可以关闭第二个窗口并且必须有权访问第一个窗口。

关于窍门的任何想法如何隐藏第一个窗口,只是时间,第二个窗口出现?

在此先感谢

回答

2

NSDisableScreenUpdatesNSEnableScreenUpdateslink)可能是在这种情况下非常有用。该文档说:

您通常会调用此函数,以便多个窗口上的操作对用户来说显示为原子。

这似乎描述你的情况。

虽然不相关的建议一句话:不要盲目地设置窗口级别。 2003年的窗口级别可能会导致窗口出现在诸如码头甚至菜单栏之类的东西上,这肯定会很奇怪。除非你有充分的理由,否则你应该坚持在NSWindow.h中声明的标准水平。 NSFloatingWindowLevel可能是合适的(尽管我不确定SFAuthorizationPluginView窗口显示的是什么级别)。

+0

谢谢kperryua, NSDisableScreenUpdates和NSEnableScreenUpdates解决我的问题。 关于级别,值2003来自http://web.archiveorange.com/archive/v/cW70L1Nj3YC74qIVlURA – skuallpa 2010-12-14 15:14:54

0

和MacOS 10.4起,您可以使用:

[NSWindow disableScreenUpdatesUntilFlush];