0

親子関係で編成されたいくつかの領域の属性が関連付けられた単純なグラフィカル ジオメトリを操作するアプリケーションに取り組んでいます。アプリケーションQMainWindow内のレイアウトにQGraphicsSceneを使用し、各領域のグラフィカル要素を管理するための個別のウィンドウを使用して、Qtでこれを構築しています。

現在、レイアウトクラスがスーパーをセットアップし、スーパー領域作成し、グラフィック要素と別のウィンドウを制御するManagerクラスを作成する方法でセットアップされています。

別のケースを追加すると、各リージョンは TCP クライアントを作成してサーバーに接続し、グラフィカルに表示されるメッセージを受信する場合があり、このクライアントは静的な QMessageBox メソッドを使用して現在表示されているエラーに遭遇する可能性があります。

一般的に言えば、オブジェクト階層でカスタム クラスと Qt クラスを混在させています。このオブジェクト階層では、GUI のベースとなるルートの親 (MainWindow) に子要素がアクセスする必要がある場合があります。

  • これらのオブジェクトの多くは QGraphicsScene にアクセスする必要があるため、現在、複数のparent() 呼び出しまたはシーンのポインターを渡すことによってアクセスする方法を組み合わせて使用​​しています。
  • インターフェイスを介してより良い分離を作成するために Qt のシグナルスロットメカニズムを使用することがありますが、これによりオーバーヘッドが発生します (オブジェクト参照を介してメソッドを呼び出す場合と比較して [スレッドの安全性を除いて] 利点が何であるかはわかりません)
  • 階層内のすべてのオブジェクトが QWidget を継承するわけではないため、「親」参照が常に機能するとは限りません (たとえば、QMessageBox モダリティなど)。

これが漠然とした質問であることは承知していますが、典型的な GUI 階層内のオブジェクトがどのように相互作用し、Qt の Signal-Slot メカニズムがどのように最適に使用されるかについての一般的なヒントを探しているだけです。

クラスで常に MainWindow への参照を渡す必要がありますか? その参照をグローバルに保持する必要がありますか? たとえば、子はメッセージ ボックスを表示するのではなく、MainWindow を表示するための信号を送信する必要があります (ただし、子はどのようにしてユーザー入力を取得するのでしょうか?)。

この問題は一般に何と呼ばれていますか?

4

0 に答える 0