私は、Qtアプリケーションのウィンドウを管理するためのベストプラクティスまたはデザインパターンを探しています。Qtアプリケーションでウィンドウを管理する標準的な方法はありますか?
私は何を意味するか説明しましょう。いくつかのウィンドウ(A、B、C)を持つアプリケーションがあり、window A
をwindow B
に開いて、新しいwindow A
インスタンスが呼び出され、最後に表示する必要があるときに有効なパラメータを作成する必要があるとします。ウィンドウCは、既存のインスタンスを前面に持って来て、新しいインスタンスを作成します。
もちろん、実際のアプリケーションははるかに複雑で、より多くのウィンドウと制限があるため、コード全体にウィンドウ管理操作を広めたくないので、静的なWindowManager
クラスに入れておきます。 (実際にはこのクラスはシングルトンですが、静的クラスに変更することを検討しています)
WindowManagerクラスはシステム内の各ウィンドウに対して(プライベート)QSharedPointer
を保持しているので、コードのどこからでもすべてのウィンドウを簡単に操作できます。 window X
を表示する必要があるときは、WindowManager::showX(params)
を呼び出して、すべてのチェックと初期化がそのコードで行われます。また、私はWindowManager::minimizeX()
のような方法をいくつかのロジックを処理するために、システムトレイのメッセージを表示し、ウィンドウを最小化する。
これは一般的なニーズですか、問題を解決するための一般的なパターンはありますか?どのようにあなたのアプリケーションのウィンドウを管理していますか?私は何をしましたか(静的WindowManagerクラス)は受け入れられますか?
編集:アプリケーションはシステムトレイアプリケーションなので、ウィンドウ間に親子関係はありません。代わりに、それらはお互いに独立しており、一般的には(グローバル)ホットキーで任意のウィンドウを呼び出します。しかし、窓の中で別のものを開く必要があるが、まだ彼らは親と子になることができないという少数のケースがある。
私はこれと同じように複雑なものを書いているとは言えません。通常、さまざまなダイアログを持つメインウィンドウ。必要に応じてモーダルでもなくてもかまいません。特定のウィンドウを処理するためのコードは、そのウィンドウのクラスに入ります。そのウィンドウ/ダイアログが別のダイアログを必要とする場合、それは前記ダイアログの設定を管理するが、ロジックはすべてセカンダリダイアログのクラス内にある。あなたがそのモデルを使用するのを妨げる何かがありますか? – casualcoder
通常、両親は子供を育てます。子ウィジェットを作成し、設定して持ち出します。メインウィンドウがある場合、そのメインウィンドウは多くのセカンダリウィンドウを処理します。そのコードを、ウィンドウの作成と管理に特化した別のクラスに分解することができ、それが良いデザイン(シングルトンは決して存在しない)であることはわかりません。 –
@casualcoder:実際には私のアプリケーションはシステムトレイに常駐しており、ユーザーは異なる(グローバル)ホットキーによって異なるウィンドウをトリガーし、ウィンドウ間に親子関係はありません。ウィンドウは別のウィンドウ内で呼び出すことも、ホットキーで開くこともできます。それは私にそのような質問があります。 – destan