我正在編寫一些我沒有寫的代碼,並且對實際操作感到困惑,實質上是使用信號和插槽來完成一切。何時適合使用Qt信號來通信DOWN依賴樹?
我明白使用它們來傳遞UP依賴樹(基本上,用作回調)。例如,如果我們有以下類:
MainWindow
- >SomeDialog
- >SomeView
- >SomeModel
...和SomeModel
能夠改變一些共享的應用程序狀態的,它可以發射信號changed()
這是連接到一個插槽SomeView
,後者又向SomeDialog
等發送信號。
這是有價值的,因爲它確保對象與其子之間不存在循環依賴關係; SomeModel
不需要知道任何關於SomeView
或其父母的信息。
但是你爲什麼要做反向?也就是說,如果我有AnotherDialog
,AnotherView
,,需要知道什麼時候狀態在SomeModel
改變了,爲什麼我會用信號在下向方向通信呢?信號傳播的路徑最終被:
SomeModel
- >SomeView
- >SomeDialog
- >MainWindow
- >AnotherDialog
- >AnotherView
- >
這是難以調試,混淆,和(據我可以說)完全沒有必要。一旦信號傳播到MainWindow
,它可以直接調用其實例AnotherDialog
上的方法,不需要信號......對吧?
我意識到這個問題可能過於模糊,但我想確保我不會在忽略所有舊代碼之前忽略一些Qt設計原則。
是否有一個原因,你會在每個類中發出一個新的信號,而不是直接將信號從SomeModel連接到AnotherModel? – thuga
@thuga因爲MainWindow不知道SomeModel或AnotherModel;它只是構建了對話框,這反過來又構建了視圖等等。這本身就是一個設計缺陷,但我試圖在這裏一次解決一個問題...... –
那麼,有信號和插槽的原因之一,雖然它不完全涉及這種情況,但如果你有100個對象。因此,不要分別調用每個函數,只需發出一個連接到這些對象的某個插槽的信號即可。除了RA提到的那種線程關聯外,我找不到任何使用信號和槽的原因,而不是直接調用一個函數。也許如果你不想使用全局變量,而是使用局部變量。 – thuga