【问题标题】:Hide window until the top window is displayed隐藏窗口,直到显示顶部窗口
【发布时间】:2011-05-25 07:35:48
【问题描述】:

我遇到了一些烦人的设计问题。给我的问题起个标题不容易。

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

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

[myview displayView];

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

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

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

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

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

提前致谢

【问题讨论】:

    标签: cocoa qt window hide sfauthorizationpluginview


    【解决方案1】:

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

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

    这似乎描述了你的情况。

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

    【讨论】:

    【解决方案2】:

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

    [NSWindow disableScreenUpdatesUntilFlush];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多