1

タイトルとしてQt 4.8を使用して、Mac OS Xでプログラムを開発しています。今、私はそれに多くの時間を費やしましたが、まだ解決できない問題に直面しています。

何らかの操作の後に QMainWindow (B と呼ばれる) を開く QWidget (A と呼ばれる) があります。B が開かれると、A が B によってブロックされる必要があるため、A を B の親として設定し、B のウィンドウ モダリティを Qt::WindowModal に設定します。

他のプラットフォームでは思った通りに動作しますが、Mac になると、B には独自のタイトル バーがなく、ポップアップして A のタイトル バーにアタッチされているだけです。 A のタイトル バーはグレー表示されています。つまり、ボタンで B を閉じることができません。閉じるには、QMenu の終了 QAction を使用する必要があります。

B の親を B ではなく 0(NULL) に設定すると、Windows や Linux と同じように独立したタイトル バーが表示されます。しかし、B が A によってブロックされたプロパティを失いました。

Qt::CustomizeWindowHint などのウィンドウ フラグを設定しようとしましたが、誰も機能しません。

A と B の間の階層関係を維持し、Mac で B に独立したタイトル バーを与える方法はありますか? みんなの助けをありがとう:)

ps。小さなプログラムを試してみたところ、この状況は WindowModal でのみ発生することがわかりました (NonModal と ApplicationModal は正常に動作します)。

4

1 に答える 1

1

あなたが説明している動作は、Mac OS X ではシートとして知られています。ご想像のとおり、ウィンドウがシートであるかどうかを指定するウィンドウ フラグ列挙型の値があります。ドキュメントに基づいて、OS Xで呼び出すとsetWindowModality()、デフォルトでウィンドウがシートになる可能性があるようです。これはおそらく、ほとんどの開発者がほとんどのダイアログに望むものです。モダリティを設定した後、そのフラグをテストして明示的に削除し、それが役立つかどうかを確認してください。または、どのフラグが設定されているかを確認し、それが解決策につながるかどうかを確認することもできます。

于 2012-04-26T19:01:54.063 に答える