假設我們有follogin UI:信號和槽在多層UI部件
+--------------------------+
|W1 +--------------+ |
| |W2 | |
| | +----------+ | |
| | |W3 | | |
| | +----------+ | |
| | | |
| +--------------+ |
+--------------------------+
W3是有意在W1 emited某一信號(或以下的水平,即qApp)。
這個想法是獨立開發W3。但有人必須做信號/插槽連接。
如果我們希望W3不知道任何其他小部件,並且我們不想讓W1知道W3,那麼將W1中的信號連接到W3中的插槽會是一種很好的做法/推薦方式?
解決方案1: 將W1中的信號與W2中的信號(信號到信號技術)連接起來,因此將W2中的信號連接到W3中的槽中。
解決方案2: 生成qApp信號並將其連接到W2中的插槽W3中。
解決方案3: 生成一個qApp信號,並讓W3自己使用它自己的插槽連接到它。
感謝
感謝您的回答。我認爲把W2需要的東西封裝起來是有道理的。 W2只需要公開一個插槽,誰連接他們將負責該插槽的調用。之後,W2將使用W3的這些信息。 *** qApp是一個與Qt一起訪問QApplication對象的宏,並且可以從代碼中的任何地方訪問它。通過執行connect(qApp,SIGNAL(someCustomSignal()),this,SLOT(someSlot()))可以連接QApplication實例中的信號。 – Daniel 2010-08-03 22:24:23
是的,那麼我正確理解你的qApp想法。 (和我的反對它的批評論據適用;))。我個人儘量避免在小部件中使用QApplication。假設某個具有自定義信號/槽的QApplication子類將它們連接在一起。 通常我根本不會繼承QApplication。 我寧願讓一些小部件知道彼此,而不是通過一個全能的QApplication對象隱含地綁定在一起。 – 2010-08-04 21:53:54