我面临一个有点烦人的设计问题。不容易给出我的问题的标题。
我必须显示两个窗口,一个窗口,另一个窗口。第一个是Cocoa窗口,第二个是Qt。在第二个窗口中,执行操作,但用户可以选择关闭此窗口。他必须回到第一个窗口。
要显示我的第一个窗口,实际上是SFAuthorizationPluginView,我会这样做:
[myview displayView];
然后,在第一个窗口的顶部显示用Qt制作的窗口:
QWidget* w = openMyScreen();
NSView* v = (NSView*)w->winId();
[[v window] setLevel:2003];
这很有效,但是在显示第二个窗口之前会有一个小延迟。因此,我们可以在很短的时间内看到第一个窗口。
我需要第二个窗口保持在第一个窗口的顶部,因为用户可以关闭第二个窗口并且必须能够访问第一个窗口。
关于如何隐藏第一个窗口的技巧,只是时间,第二个窗口出现?
提前致谢
答案 0 :(得分:2)
NSDisableScreenUpdates
和NSEnableScreenUpdates
(link)可能会有用。文档说:
您通常会调用此函数,以便多个窗口上的操作对用户来说是原始的。
似乎描述了你的情况。
一句不相关的建议:不要肆无忌惮地设置窗口级别。 2003年的窗口级别可能会导致窗口出现在停靠点甚至菜单栏之类的东西上,这肯定会很奇怪。除非你有充分的理由,否则你应该坚持NSWindow.h
中声明的标准等级。 NSFloatingWindowLevel
可能是合适的(虽然我不确定SFAuthorizationPluginView窗口的显示级别)。
答案 1 :(得分:0)
从MacOS 10.4开始,您可以使用:
[NSWindow disableScreenUpdatesUntilFlush];