Скрыть окно, пока не отобразится верхнее окно
-
09-10-2019 - |
Вопрос
Я сталкиваюсь с небольшой раздражающей проблемой дизайна. Нелегко дать название моего вопроса.
Я должен отобразить два окна, одно на другое. Первый - это окно какао, второе сделано с QT. Во втором окне выполняется действие, но пользователь может выбрать закрытие этого окна. Он должен упасть в первое окно.
Чтобы отобразить мое первое окно, которое на самом деле Sfauthorizationpluginview, Я делаю:
[myview displayView];
Затем, чтобы отобразить окно, сделанное с QT в верхней части первого окна:
QWidget* w = openMyScreen();
NSView* v = (NSView*)w->winId();
[[v window] setLevel:2003];
Это работает хорошо, однако существует небольшая задержка до отображения второго окна. Таким образом, мы можем увидеть в течение очень короткого времени первое окно.
Мне нужно, чтобы второе окно осталось на вершине первого окна, потому что пользователь может закрыть второе окно и должен иметь доступ к первому окну.
Есть идеи на трюке, как скрыть первое окно, только время, появляется второе окно?
заранее спасибо
Решение
NSDisableScreenUpdates
и NSEnableScreenUpdates
(связь) может быть полезен в этой ситуации. В документации говорится:
Обычно вы называете эту функцию так, чтобы операции в нескольких окнах казались атомными для пользователя.
что, кажется, описывает вашу ситуацию.
Слово не связанного совета: не устанавливайте уровни окна Willy-Nilly. Уровень окна в 2003 году, вероятно, приведет к появлению окна, таких как док -станция или даже строка меню, что определенно было бы странно. Вы должны придерживаться стандартных уровней, объявленных в NSWindow.h
Если у вас нет веской причины. NSFloatingWindowLevel
может быть уместным (хотя я не уверен, на каком уровне отображается окно SFAuthorizationPluginView).
Другие советы
Начиная с MacOS 10.4, вы можете использовать:
[NSWindow disableScreenUpdatesUntilFlush];