1

少し厄介な設計上の問題に直面しています。私の質問のタイトルを付けるのは簡単ではありません。

2 つのウィンドウを重ねて表示する必要があります。1 つ目は Cocoa ウィンドウで、2 つ目は Qt で作成されています。2 番目のウィンドウでアクションが実行されますが、ユーザーはこのウィンドウを閉じることを選択できます。彼は最初のウィンドウに戻る必要があります。

実際にはSFAuthorizationPluginViewである最初のウィンドウを表示するには、次のようにします。

[myview displayView];

次に、Qt で作成したウィンドウを最初のウィンドウの上に表示するには:

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

これはうまく機能しますが、2 番目のウィンドウが表示されるまでに少し時間がかかります。したがって、最初のウィンドウを非常に短時間見ることができます。

ユーザーは2番目のウィンドウを閉じることができ、最初のウィンドウにアクセスできる必要があるため、2番目のウィンドウが最初のウィンドウの上にある必要があります。

最初のウィンドウを非表示にする方法についてのアイデアはありますか?2番目のウィンドウが表示されますか?

前もって感謝します

4

2 に答える 2

2

NSDisableScreenUpdatesおよびNSEnableScreenUpdates(リンク) は、この状況で役立つ場合があります。ドキュメントには次のように記載されています。

通常、この関数を呼び出して、複数のウィンドウでの操作がユーザーにアトミックに見えるようにします。

あなたの状況を説明しているようです。

関係のないアドバイスですが、ウィンドウ レベルをむやみに設定しないでください。2003 のウィンドウ レベルでは、ドックやメニュー バーなどの上にウィンドウが表示される可能性が高く、これは明らかに奇妙です。NSWindow.h正当な理由がない限り、で宣言されている標準レベルに固執する必要があります。NSFloatingWindowLevel適切かもしれません (ただし、SFAuthorizationPluginView ウィンドウがどのレベルで表示されるかはわかりません)。

于 2010-12-14T14:45:51.773 に答える
0

MacOS 10.4 以降では、以下を使用できます。

[NSWindow disableScreenUpdatesUntilFlush];
于 2014-10-02T14:06:00.507 に答える