2012-04-26 16 views
1

タイトルとしてQt 4.8を使用してMac OS Xでプログラムを開発しました。 今、私はそれに多くの時間を費やしましたが、まだ解決できない問題に直面しています。子QMainWindowタイトルバーがMac OS Xで消えました(詳細説明を追加)

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

他のプラットフォームでは、これは私が思ったように動作しますが、Macの場合はBにはタイトルバーがありません。Aのタイトルバーにポップアップして貼り付けました。 Aのタイトルバーにある閉じるボタンはグレー表示されています。つまり、ボタンでBを閉じることはできません。終了するにはQMenuのQActionを終了する必要があります。

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

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

AとBの間の階層関係を維持する方法はありますか?BにはMacの独立したタイトルバーがありますか?みんなのおかげでよろしく。

ps。私はあなたが疑われるとして、あなたが記述している行動はマックOS X上でシートとして知られている

答えて

1

(非モーダルとApplicationModalが正常に動作します)小さなプログラムにしようと、このような状況でのみWindowModalに起こったことがわかった、の値がありますウィンドウがシートかどうかを指定するwindowフラグenum。 the documentationに基づいて、OS XでsetWindowModality()を呼び出すと、ウィンドウがデフォルトでシートになる可能性があります。ほとんどの開発者がほとんどのダイアログで必要と思われるものでしょう。モダリティを設定した後で、そのフラグをテストして明示的に削除し、それが役立つかどうか確認してみてください。あるいは、どのフラグが設定されているかを確認し、それが解決策につながるかどうかを確認することができます。

+0

ありがとうCaleb! QMainWindowを生成し、Qt CreatorによってWindowModalに設定しました。生成されたui_mainwindowファイルのsetWindowModality関数を呼び出します。 最初はフラグを設定しなかったので、Qt :: Windowを試しましたが、状況は同じです。 uiファイルはデフォルトでフラグを設定しませんでした。 私が追加した説明として、これはwindowModalでのみ発生します。 NonModalおよびApplicationModal isfine。それは関連していますか? 私がGoogle上で見つけることができるのは、私がすでに行ったウィンドウのフラグです。 Qt :: Windowにはシートプロパティは含まれていません。 通常のウィンドウの代わりにシートとして動作するのはなぜですか? –

関連する問題