2010-12-14 114 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];