私は2つのトップレベルウィンドウ(親ウィジェットを持たない)を持つアプリケーションを持っています。これらは互いに独立しており、彼らの間で彼らはいつでも切り替えることができます。しかし、これらのウィンドウの1つがdlg.exec()
を呼び出すことによってモーダルダイアログを開くと、他のウィンドウもブロックされます。ユーザーはまったく切り替えることはできません。私はdlg.setWindowModality(Qt::WindowModal)
とその後のdlg.show()
でモーダルダイアログを作成することができましたが、彼はダイアログを表示し、ダイアログからの戻り値を待たずに続行します。したがって、モーダルダイアログの結果を処理したい場合(通常、ファイルのダイアログを開く/保存するなど、いくつかの情報を照会するなど)、ダイアログの結果を処理する機能を他の機能(ダイアログを開いたもの以外)アドホック信号/スロット接続、コールバックを使用するか、またはダイアログ自体に結果を処理する方法を教えてください。これは私の見解では悪い設計です。ファイルダイアログなどのダイアログに組み込まれていると、特に難しいです。他の1つをブロックすることなく複数のトップレベルウィンドウとモーダルダイアログ
dlg.exec()
のようなモーダルダイアログを開くことができます。これは、1つのウィンドウしかブロックせず、ダイアログ結果を待っていますが、他のウィンドウをブロックしませんか?私はそれが可能ではないと思うが、多分私は何かを逃した。私は、例えば糸で魔法を、そして私には知られていない
QEventLoop
を意味していますか?私が知っている限り、ウィジェットはメインスレッドに存在しなければなりません。これはスレッドを使用したい場合、この場合の少し問題です。
PS:私が必要とするものをより良く理解できるように、Excelを想像してみてください一方のウィンドウではVBエディタ、他方のウィンドウではVBエディタを使用します。ユーザーはいつでもVBに切り替えることができます。
あなたが正しいです、それは私の必要に応じて動作します!私は愚かです、私は 'exec()'と 'Qt :: WindowModal'との組み合わせを試しませんでした。 'exec()'が呼ばれるときのデフォルトのダイアログモダリティは 'Qt :: ApplicationModal'ですが、変更可能です。 –