2010-12-14 12 views
1

Ich stehe vor einem kleinen nervigen Designproblem. Nicht leicht, einen Titel meiner Frage zu geben.Fenster ausblenden, bis das obere Fenster angezeigt wird

Ich muss zwei Fenster anzeigen, eins über das andere. Der erste ist ein Cocoa-Fenster, der zweite ist mit Qt gemacht. Im zweiten Fenster wird eine Aktion ausgeführt, aber der Benutzer kann dieses Fenster schließen. Er muss auf das erste Fenster zurückfallen.

Für mein erstes Fenster angezeigt, das ist eigentlich ein SFAuthorizationPluginView, ich mache:

[myview displayView]; 

dann das Fenster mit Qt oben auf ersten Fenster gemacht anzuzeigen:

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

Dies funktioniert Nun, es gibt eine kleine Verzögerung, bevor das zweite Fenster angezeigt wird. Wir können somit für eine sehr kurze Zeit das erste Fenster sehen.

Ich brauche, dass das zweite Fenster über dem ersten Fenster bleibt, weil der Benutzer das zweite Fenster schließen kann und Zugriff auf das erste Fenster haben muss.

Irgendwelche Ideen auf einen Trick, wie man das erste Fenster, gerade die Zeit versteckt, erscheint das zweite Fenster?

Vielen Dank im Voraus

Antwort

2

NSDisableScreenUpdates und NSEnableScreenUpdates (link) könnte in dieser Situation nützlich sein. Die Dokumentation lautet:

Sie rufen diese Funktion normalerweise auf, so dass Vorgänge in mehreren Fenstern für den Benutzer atomar erscheinen.

, die Ihre Situation zu beschreiben scheint.

Ein Wort des unabhängigen Ratschlags: Gehen Sie nicht Fensterebenen willy-nilly. Eine Fensterstufe von 2003 wird wahrscheinlich dazu führen, dass das Fenster über Dinge wie das Dock oder sogar die Menüleiste erscheint, was definitiv seltsam wäre. Sie sollten sich an die Standardstufen halten, die in NSWindow.h deklariert sind, es sei denn, Sie haben einen guten Grund. NSFloatingWindowLevel könnte geeignet sein (obwohl ich nicht sicher bin, auf welcher Ebene das SFAuthorizationPluginView-Fenster angezeigt wird).

+0

Dank kperryua, NSDisableScreenUpdates und NSEnableScreenUpdates mein Problem gelöst. In Bezug auf die Ebene kommt der Wert 2003 von http://web.archiveorange.com/archive/v/cW70L1Nj3YC74qIVlURA – skuallpa

0

Beginnend mit MacOS 10.4 können Sie verwenden:

[NSWindow disableScreenUpdatesUntilFlush]; 
Verwandte Themen