2012-01-13 52 views
3

我有類似下面的代碼:死QML元素接收信號?

... 
id: myComponent 
signal updateState() 
property variant modelList: [] 
Repeater { 
    model: modelList 
    MyButton { 
     ... 
     Connection { 
      target: myComponent 
      onUpdateState: { 
       ... 
      } 
     } 
    } 
} 

我分配一個值modelList,然後發出myComponent.updateState()來更新轉發器myButton的組件。在這一點上,我收到很多關於不存在的屬性的警告

似乎信號傳遞給不再存在的MyButton(因爲當我更改modelList時,中繼器會重新運行)。

有沒有辦法避免這種情況,還是應該忽略警告?

回答

3

當銷燬連接到C++信號的QML組件時,我遇到了類似的問題。問題是通過添加處理器來解決組件被破壞時的信號問題。在動態生成的組件中,您可以嘗試手動連接信號,以便在銷燬時手動斷開它們。在我的情況下,代碼看起來是這樣的:

MyComponent { 
    Component.onCompleted: signal.connect(callback_function) 
    Component.onDestruction: signal.disconnect(callback_function) 

    function callback_function() { 
     // process signal 
    } 
} 

這可能是,有一個更好的解決方案並不需要手動連接和斷開的信號,但是這爲我工作。如果將console.log("Destroying...")添加到onDestruction處理程序中,您可以檢查組件是否斷開信號,從而實際上被破壞。