2012-01-13 14 views
3

Iは、次のようなコードを持っている:シグナルを受信するデッドQML要素?

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

IはmodelListに値を代入した後、リピータ内にMyButtonコンポーネントを更新するmyComponent.updateState()を発行します。この時点で、存在しないプロパティについて多くの警告が表示されます

信号がMyButtonに渡されるようになりました(モデルリストを変更するとリピータが再実行されるため)。

これを回避する方法はありますか、それとも単に警告を無視する必要がありますか?

答えて

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ハンドラに追加すると、コンポーネントが信号を切断して実際に破棄されているかどうかを確認できます。

関連する問題