上部ウィンドウが表示されるまでウィンドウを非表示にします
-
09-10-2019 - |
質問
私は少し迷惑なデザインの問題に直面しています。私の質問のタイトルを与えるのは簡単ではありません。
2つのウィンドウを1つずつ表示する必要があります。 1つ目はココアウィンドウ、2つ目はQTで作られています。 2番目のウィンドウでは、アクションが実行されますが、ユーザーはこのウィンドウを閉じることを選択できます。彼は最初の窓に戻らなければなりません。
私の最初のウィンドウを表示するには、実際には sfauthorizationpluginview, 、 そうです:
[myview displayView];
次に、最初のウィンドウの上にQTで作成されたウィンドウを表示します。
QWidget* w = openMyScreen();
NSView* v = (NSView*)w->winId();
[[v window] setLevel:2003];
これはうまく機能しますが、2番目のウィンドウが表示される前に小さな遅延があります。したがって、最初のウィンドウを非常に短時間見ることができます。
2番目のウィンドウは、2番目のウィンドウを閉じて最初のウィンドウにアクセスできる必要があるため、2番目のウィンドウが最初のウィンドウの上にとどまる必要があります。
最初のウィンドウを非表示にする方法、ちょうど時間、2番目のウィンドウが表示される方法のアイデアはありますか?
前もって感謝します
解決
NSDisableScreenUpdates
と NSEnableScreenUpdates
(リンク)この状況では役立つかもしれません。ドキュメントには次のように書かれています
通常、この関数を呼び出して、複数のウィンドウでの操作がユーザーにアトミックに見えるようにします。
あなたの状況を説明しているようです。
ただし、無関係なアドバイスの言葉:ウィンドウレベルを意欲的に設定しないでください。 2003年のウィンドウレベルは、ドックやメニューバーなどにウィンドウが表示される可能性があります。これは間違いなく奇妙です。宣言された標準レベルに固執する必要があります NSWindow.h
正当な理由がない限り。 NSFloatingWindowLevel
適切かもしれません(ただし、SFAuthorizationPluginViewウィンドウが表示されているレベルはわかりません)。
他のヒント
MacOS 10.4から始めて、使用できます。
[NSWindow disableScreenUpdatesUntilFlush];