1

我面临一个有点烦人的设计问题。不容易给出我的问题的标题。

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

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

[myview displayView];

然后,在第一个窗口的顶部显示用 Qt 制作的窗口:

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

这很好用,但是在显示第二个窗口之前会有一点延迟。因此,我们可以在很短的时间内看到第一个窗口。

我需要第二个窗口保持在第一个窗口的顶部,因为用户可以关闭第二个窗口并且必须可以访问第一个窗口。

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

提前致谢

4

2 回答 2

2

NSDisableScreenUpdatesNSEnableScreenUpdates(链接) 在这种情况下可能很有用。文档说:

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

这似乎描述了你的情况。

不过,有一句不相关的建议:不要随意设置窗口水平。2003 的窗口级别可能会导致窗口出现在诸如停靠栏甚至菜单栏之类的东西上,这肯定会很奇怪。NSWindow.h除非您有充分的理由,否则您应该坚持声明的标准水平。NSFloatingWindowLevel可能是合适的(尽管我不确定 SFAuthorizationPluginView 窗口显示在哪个级别)。

于 2010-12-14T14:45:51.773 回答
0

从 MacOS 10.4 开始,您可以使用:

[NSWindow disableScreenUpdatesUntilFlush];
于 2014-10-02T14:06:00.507 回答