私は書いていないいくつかのコードを扱っており、本質的に、シグナルとスロットを絶対にすべてに使用するという慣行について混乱しています。
それらを使用して依存関係ツリーを通信することを理解しています(基本的に、コールバックとして使用されます)。たとえば、次のクラスがあるとします。
MainWindow
-> SomeDialog
-> SomeView
->SomeModel
...そしてSomeModel
、いくつかの共有アプリケーションの状態を変更することができます。それはchanged()
、のスロットに接続されSomeView
た信号を発信し、次に、に信号を送信しますSomeDialog
。
これは、オブジェクトとその子の間に循環依存がないことを保証するため、価値があります。と通信するために、またはその親SomeModel
について何も知る必要はありません。SomeView
しかし、なぜ逆のことをするのでしょうか? つまりAnotherDialog
、とがAnotherView
あり、で状態がいつ変更されたかを知る必要がある場合、なぜ信号を使用して下方向に通信するのでしょうか? 信号伝搬の経路は次のようになります。AnotherModel
AnotherModel
SomeModel
SomeModel
-> SomeView
-> SomeDialog
-> MainWindow
-> AnotherDialog
-> AnotherView
->AnotherModel
これはデバッグが難しく、紛らわしく、(私が知る限り) まったく不要です。シグナルが に伝播されるとMainWindow
、 のインスタンスで直接メソッドを呼び出すことができますAnotherDialog
。シグナルは必要ありません...そうですか?
この質問は漠然としすぎているかもしれませんが、古いコードをすべてリファクタリングする前に、Qt の設計原則を無視していないことを確認したかったのです。