Скрыть окно, пока не отобразится верхнее окно - PullRequest
1 голос
/ 14 декабря 2010

Я столкнулся с небольшой раздражающей проблемой дизайна. Не легко дать название моему вопросу.

Я должен отобразить два окна, одно поверх другого. Первое окно Какао, второе сделано с помощью Qt. Во втором окне выполняется действие, но пользователь может закрыть это окно. Он должен отступить к первому окну.

Для отображения моего первого окна, которое на самом деле является SFAuthorizationPluginView , я делаю:

[myview displayView];

затем, чтобы отобразить окно, созданное с помощью Qt, поверх первого окна:

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

Это работает хорошо, однако перед вторым окном отображается небольшая задержка. Таким образом, мы можем очень быстро увидеть первое окно.

Мне нужно, чтобы второе окно оставалось поверх первого окна, потому что пользователь может закрыть второе окно и иметь доступ к первому окну.

Есть идеи по поводу того, как спрятать первое окно, только время, когда появляется второе окно?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 14 декабря 2010

NSDisableScreenUpdates и NSEnableScreenUpdates ( ссылка ) могут быть полезны в этой ситуации. В документации написано:

Вы обычно вызываете эту функцию, чтобы операции с несколькими окнами казались пользователю атомарными.

, который, кажется, описывает вашу ситуацию.

Слово несвязанного совета, хотя: не ходите устанавливать уровни окна волей-неволей. Уровень окна 2003, скорее всего, приведет к тому, что окно появится над такими вещами, как док-станция или даже строка меню, что определенно будет странным. Вы должны придерживаться стандартных уровней, заявленных в NSWindow.h, если у вас нет веских причин. NSFloatingWindowLevel может быть уместно (хотя я не уверен, на каком уровне отображается окно SFAuthorizationPluginView).

0 голосов
/ 02 октября 2014

Начиная с MacOS 10.4, вы можете использовать:

[NSWindow disableScreenUpdatesUntilFlush];
...