我的代码类似于以下内容:
...
id: myComponent
signal updateState()
property variant modelList: []
Repeater {
model: modelList
MyButton {
...
Connection {
target: myComponent
onUpdateState: {
...
}
}
}
}
我为modelList分配一个值,然后发出myComponent.updateState()来更新转发器中的MyButton组件。在这一点上,我收到很多关于不存在的属性的警告
似乎信号传递给不再存在的MyButton(因为当我更改modelList时转发器将重新运行)。
有没有办法避免这种情况,还是应该忽略警告?
答案 0 :(得分: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
,则可以检查组件是否正在断开信号,从而实际销毁。