Вопрос

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

Я должен отобразить два окна, одно на другое. Первый - это окно какао, второе сделано с 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];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top